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