awk内でgrepを実行するためにsystem()を使用しようとしています。ドキュメントによると、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
0で終了する必要があるため、yes、no?が印刷されます。
$ 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
ベストアンサー1
シェルでは、終了コード0はコマンドの成功を示し、他の終了コードは失敗(およびその理由)を示します。system
返される内容は次のとおりです。 0 は成功を示しますが、awk
FALSE と解釈されます。論理を裏返す必要があります。