マニュアルによれば、実行されているコマンドの終了コードを返すsystem()を使用して、awk内でgrepを実行しようとしています。
$ cat foo.txt
bar
$ grep -q bar foo.txt; echo $?
0
$ awk 'BEGIN{ if ( system( "grep -q bar foo.txt" ) ) { print "yes" } else { print "no" } }'
no
-q
を削除すると、grepが実際にbar
を検出していることがわかります。そのため、grepは0を終了するため、「はい、いいえ」と出力しますか?
$ awk 'BEGIN{ if ( system( "grep bar foo.txt" ) ) { print "yes" } else { print "no" } }'
bar
no
方程式からgrep
を完全に削除します。
$ awk 'BEGIN{ if ( system( "true" ) ) { print "yes" } else { print "no" } }'
no
シェルでは、終了コード0はコマンドの成功を表し、その他は失敗(およびその理由)を表します。これがsystem
が返すものです。成功した場合は0ですが、awk
はこれをFALSEと解釈します。ロジックを反転させる必要があります。