bash-3.00# cat > b1.txt
AAA,Apples,123
BBB,Bananas,124
CCC,Carrot,125
bash-3.00# cat > b2.txt
Store1|AAA|123|11
Store2|BBB|124|23
Store3|CCC|125|57
Store4|DDD|126|38
bash-3.00# awk -F"[,|]" 'NR==FNR{a[$1]++;next} !a[$2]' b1.txt b2.txt
Store4|DDD|126|38
NR==FNR
첫 번째 파일이 true 를 반환 하면 a[$1]
증가합니다 . next
스크립트의 시작 부분으로 돌아갑니다. 그런데 !a[$2]
여기서 무슨 일이 일어나고 있는 걸까요? 명령 없이도 print
어떻게 인쇄됩니까 ?
답변1
~에서POSIX awk
사양:
awk 프로그램은 다음 형식의 쌍으로 구성됩니다.
pattern { action }
패턴이나 연산(괄호 문자 포함) 중 하나를 생략할 수 있습니다. ...[A] 누락된 작업은 다음과 같습니다.
{ print }
!a[$2]
귀하의 경우 에는무늬, 그리고 행동력 부족.
답변2
이전 답변을 확장하면 다음과 같습니다.
awk
참/거짓 테스트를 숫자로 처리합니다. 0은 '거짓'이고 다른 숫자는 '참'입니다. 느낌표( !
)는 테스트를 반전시킵니다.
따라서 !a[$1]
본질적으로 "0과 같으면 인쇄합니다"라고 말하는 것과 같습니다 a[$1]
.