印刷せずに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

~からPOSIXawk仕様:

awk プログラムは、次の形式のペアで構成されます。

pattern { action }

パターンまたは操作(括弧文字を含む)のいずれかを省略できます。 ...[A] 欠落している操作は次のとおりです。

{ print }

!a[$2]あなたの場合模様、そして行動力の欠如。

答え2

前の回答を拡張すると、次のようになります。

awk真/偽のテストを数値として扱います。 0 は「FALSE」、その他の数字は「TRUE」です。感嘆符(!)はテストを反転します。

したがって、!a[$1]本質的に「0と同じなら印刷します」と言うのと同じですa[$1]

関連情報