grep 結果の確認

grep 結果の確認

Available以下のコードを使用して一致するものがあれば、印刷しようとしています。 nil

grep -o 'pattern' test.log | awk '{if($0=="pattern") print "Available"; else print "nil"}'

そのif部分はうまくいきますが、elsegrepが空の場合はその部分を取得できません。

答え1

パターンが一致しない場合、grep出力は生成されず、awkプログラムで使用するデータはありません。そのため、コードnilでは決してawk取得できません。

別の方法は

if grep -q 'pattern' test.log; then
    echo 'Available'
else
    echo 'nil'
fi

オプションは、ユーティリティが出力の生成を停止するため-qに使用されますgrep(診断出力を除く)。ここでは出力は必要なく、grep終了状態のみが必要です。


必要に応じてawkテストを続けることができますが、条件に応じてブロックに文字列を出力する必要がありますnilEND

grep -o 'pattern' test.log |
awk '/pattern/ { print "Available"; found = 1 }
     END { if (!found) print "nil" }'

ENDこのブロックは、スクリプトに入力がない場合でもawk実行されます。

実際には、以下を使用してすべての操作を実行できますawk

awk '/pattern/ { print "Available"; found = 1; exit }
     END { if (!found) print "nil" }' test.log

呼び出しはブロックexitを呼び出すため、変数ENDを削除できませんfound

関連情報