特定のファイルにテキストが見つからない場合は、ゼロを印刷します。

特定のファイルにテキストが見つからない場合は、ゼロを印刷します。

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

私のコマンドはapple352.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 -1if0条件が常にtrueであることです。

コードの他の問題は、awk '{printf("%f", $4)}' >> outこれが入力をどこで取得するかということですawk

答え2

理由なくこの問題を複雑にしています。まず、そうする必要はありません。 Tellを使用して、入力の最後の行に対してのみ何かを実行tailできます。これにより、追加ボーナスに一致するものがない場合、コマンドはすでに次のものを印刷します。awkENDawk0

$ 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

関連情報