awk计算平均值或零

问题描述 投票:8回答:3

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

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

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

bash awk
3个回答
15
投票

你通过产生一个额外的过程来增加你的负载(平均值)来完成第一个可以做的事情。一起使用'grep'和'awk'是一个红旗。你最好写:

awk '/^num/ {n++;sum+=$2} END {print n?sum/n:0}' file

5
投票

试试这个:

... END { print NR ? sum/NR : 0 }

1
投票

使用awk的三元运算符,即m ? m : n,这意味着,如果m的值为'?',则使用它,否则':'使用此其他值。 n和m都可以是产生值的字符串,数字或表达式。

grep '^num' file.$i | awk '{ sum += $2 } END { print sum ? sum / NR : 0.0 }'
© www.soinside.com 2019 - 2024. All rights reserved.