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 -1
,0
因此 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