%EC%9D%84%20%EC%8B%9D%EB%B3%84%ED%95%98%EB%8A%94%20%EA%B2%83%EC%97%90%EC%84%9C%20%EC%97%AC%EB%9F%AC%20%EC%97%B4%EB%A1%9C%20awk%20%ED%95%9C%20%EC%A4%84%20%ED%99%95%EC%9E%A5.png)
Cygwin에서 Win7을 사용하고 있습니다. 한 쌍의 열에서 일치 항목을 식별하는 데 작동하는 한 줄짜리가 있지만 추가 열(예: >2)을 도입하려고 하면 작동할 수 없습니다. 따라서 다음은 나에게 효과적입니다.
gawk -F "^" '{ if ($3 == $7) print "0"; else print $3,$7; }' infile.txt > outfile.txt
그러나 다른 열 쌍을 추가하면 구문 오류가 발생합니다.
gawk -F "^" '{ if ($3 == $7 || $3 == $11) print "0"; else print $3,$7,$11; }' infile.txt > outfile.txt
따라서 명령에 문제가 있지만 오류 메시지는 나에게 별로 도움이 되지 않습니다. "||"를 "&&"로 대체하면 또한 오류가 발생합니다(첫 번째 "$7" 바로 뒤에 "예기치 않은 줄 바꿈 또는 문자열 끝" 및 "$3은 내부 또는 외부 명령, 실행 가능한 프로그램 또는 배치 파일로 인식되지 않습니다").
다음은 "^"를 열 구분 기호로 사용하여 세 개의 행을 포함하는 입력 파일의 예입니다.
paris^london^new york^paris^rome^paris
paris^london^munich^paris^rome^paris
paris^london^munich^berlin^rome^paris
파일의 각 행에서 열 1, 4, 6이 서로 일치하는지 확인하고 싶습니다. 따라서 이 경우 1행은 "예", 2행은 "예", 3행은 "아니오"입니다. 따라서 출력에는 "예"인 경우 "0"이 표시되고 "아니요"인 경우 전체 행이 반복되어야 합니다. 따라서 출력은 다음과 같습니다.
0
0
paris^london^munich^berlin^rome^paris
어떤 아이디어가 있나요?
답변1
피하려고 노력 ||
하고&&
&&
테스트 용gawk -F "^" '$3 == $7{if($3 == $11){print "0"; next;}}{print $3,$7,$11}'
||
테스트 용gawk -F "^" '$3 == $7{print "0"; next;}$3 == $11{print "0"; next;}{print $3,$7,$11}'
답변2
마침내 얻었습니다. 저는 Win7과 함께 Cygwin을 사용하고 있습니다. 작은 따옴표는 좋지 않았기 때문에 모든 작은 따옴표를 큰 따옴표로 바꾸면 구문이 수정되고 추가로 "||" 좋지 않았지만 "&&"는 잘 작동합니다. 따라서 다음이 작동합니다.
gawk -F "^" "{ if ($1 == $2 && $3 == $4 && $4 == $5 && $5 == $6) 0을 인쇄하고, else는 $1,$2,$3을 인쇄; }" infile.txt > outfile.txt