Available
以下のコードを使用して一致するものがあれば、印刷しようとしています。 nil
grep -o 'pattern' test.log | awk '{if($0=="pattern") print "Available"; else print "nil"}'
そのif
部分はうまくいきますが、else
grepが空の場合はその部分を取得できません。
答え1
パターンが一致しない場合、grep
出力は生成されず、awk
プログラムで使用するデータはありません。そのため、コードnil
では決してawk
取得できません。
別の方法は
if grep -q 'pattern' test.log; then
echo 'Available'
else
echo 'nil'
fi
オプションは、ユーティリティが出力の生成を停止するため-q
に使用されますgrep
(診断出力を除く)。ここでは出力は必要なく、grep
終了状態のみが必要です。
必要に応じてawk
テストを続けることができますが、条件に応じてブロックに文字列を出力する必要がありますnil
。END
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
。