如果在特定文件中找不到文本,则打印零

如果在特定文件中找不到文本,则打印零

grep如果在特定文件中找不到,我想打印零

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

我的命令 grepapple并打印 352.271。但如果没有匹配,我希望它打印出来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 -10因此 if 条件始终为 true。

您的代码的另一个问题是awk '{printf("%f", $4)}' >> out,这里从哪里awk获取其输入?

答案2

你无缘无故地让这件事复杂化了。首先,您不需要tail,您可以awk使用 告诉仅针对最后一行输入运行某些内容END。这样,作为额外的好处,如果未找到匹配项,您的awk命令将已经打印 a :0

$ cat file
Apple
is 
xyz 
abc def cost 352.271
$ grep -A4 "badstring" file | awk 'END{printf("%f\n", $4)}'
0.000000

如果你坚持只获得一个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

相关内容