grep
特定のファイルに見つからない場合は、0を印刷したいと思います。
grep -A4 " Apple " a.txt | tail -1 | awk '{printf("%f", $4)}' >> out
私もif else条件を使ってみました。
if grep -A4 " Apple " a.txt | tail -1 ;
then
awk '{printf("%f", $4)}' >> out
else
echo 0 >> out
fi
たとえば、次のファイルが提供されます。
Apple
is
xyz
abc def cost 352.271
私のコマンドはapple
352.271をgrepして印刷します。しかし、一致するものがない場合は印刷したいと思います0
。
答え1
あなたがやろうとしていることは次のとおりです。
if result=$(grep -A4 " Apple " a.txt);
then
echo "$result"|tail -1|awk '{printf("%f",$4)}' >>out
else
echo 0 >>out
fi
コードの主な問題は、パイプを使用するときに終了コードが常にケースの最後のコマンドから出てくるので、tail -1
if0
条件が常にtrueであることです。
コードの他の問題は、awk '{printf("%f", $4)}' >> out
これが入力をどこで取得するかということですawk
。
答え2
理由なくこの問題を複雑にしています。まず、そうする必要はありません。 Tellを使用して、入力の最後の行に対してのみ何かを実行tail
できます。これにより、追加ボーナスに一致するものがない場合、コマンドはすでに次のものを印刷します。awk
END
awk
0
$ cat file
Apple
is
xyz
abc def cost 352.271
$ grep -A4 "badstring" file | awk 'END{printf("%f\n", $4)}'
0.000000
1つだけ取得しようとする場合は、0
次のようにすることができます。
$ grep -A4 "Apple" file | awk 'END{k= $4 ? $4 : "0"; print k}'
352.271
$ grep -A4 "badsting" file | awk 'END{k= $4 ? $4 : "0"; print k}'
0