我正在计算一堆文本文件中的一堆数字的平均值,如下所示:
grep '^num' file.$i | awk '{ sum += $2 } END { print sum / NR }'
但有时候文件不包含模式,其中cas我希望脚本返回零。这个略有修改的单线的任何想法?
答案 0 :(得分:15)
通过产生额外的流程来完成第一个可以执行的所有操作,您将增加负载(平均值)。一起使用'grep'和'awk'是一个红旗。你最好写一下:
awk '/^num/ {n++;sum+=$2} END {print n?sum/n:0}' file
答案 1 :(得分:5)
试试这个:
... END { print NR ? sum/NR : 0 }
答案 2 :(得分:1)
使用awk的三元运算符,即m ? m : n
,这意味着,如果m的值为'?',则使用它,否则':'使用此其他值。 n和m都可以是产生值的字符串,数字或表达式。
grep '^num' file.$i | awk '{ sum += $2 } END { print sum ? sum / NR : 0.0 }'