標準出力を基準とする条件の場合

標準出力を基準とする条件の場合

条件付きで終わるいくつかのコマンドがパイプを介して接続されていますawk。以下の例

command1 | command 2 | awk '$1 > 800'

今では、時には数行を出力し、時には出力しません。一部の出力(1行以上)がある場合にのみtrueと証明される条件が必要です。これを機能させる方法はありますか?

良い、

if command1 | command 2 | awk '$1 > 800' (some output); then
do command3
else; (blank output)
Do nothing

答え1

普段はただ使うコマンドの置き換えその後、テストに入れます。

if [ ! -z "$(command1 | command 2 | awk '$1 > 800')" ]; then command3; fi

説明する

  • あなたの質問に従ってコマンドが実行されます。command1 | command 2 | awk '$1 > 800'
  • 出力はtestに渡され、長さ0の文字列で[ ! -z "$(…)" ]ない場合はtrueと評価されます。!-z

したがって、コマンドパイプラインの出力がある場合、thenコマンドは実行されます。

答え2

awkステートメントの正しい戻りコードを使用してスクリプトを終了しますif

if command1 | command2 | awk '$1 > 800 { c++; print } END { exit (c == 0) }'
then
   command3
fi

または実際にそうしない場合必要プログラム出力awk

if command1 | command2 | awk '$1 > 800 { c++; exit } END { exit (c == 0) }'
then
   command3
fi

答え3

awk次のように目的の終了コードを印刷できます。

echo 900 | awk '{ print !($1 > 800) }'

(その後、およびを使用してサブシェルにラップしてexit値を返すことができますawk

echo 900 | (exit $(awk '{ print !($1 > 800) }'))

その後、パイプラインの一部として使用できます。

echo 900 | (exit $(awk '{ print !($1 > 800) }')) && echo yes || echo no

関連情報