일치하는 열 쌍(행별)을 식별하는 것에서 여러 열로 awk 한 줄 확장

일치하는 열 쌍(행별)을 식별하는 것에서 여러 열로 awk 한 줄 확장

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

관련 정보