awk计算平均值或零

时间:2011-12-08 16:12:02

标签: bash awk

我正在计算一堆文本文件中的一堆数字的平均值,如下所示:

grep '^num' file.$i | awk '{ sum += $2 } END { print sum / NR }'

但有时候文件不包含模式,其中cas我希望脚本返回零。这个略有修改的单线的任何想法?

3 个答案:

答案 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 }'