인쇄하지 않고도 awk에서 어떻게 작동합니까?

인쇄하지 않고도 awk에서 어떻게 작동합니까?
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].

관련 정보