【发布时间】:2011-12-08 16:12:01
【问题描述】:
我正在计算一堆文本文件中一堆数字的平均值,如下所示:
grep '^num' file.$i | awk '{ sum += $2 } END { print sum / NR }'
但有时文件不包含模式,在这种情况下,我希望脚本返回零。对这个稍作修改的单线有什么想法吗?
【问题讨论】:
我正在计算一堆文本文件中一堆数字的平均值,如下所示:
grep '^num' file.$i | awk '{ sum += $2 } END { print sum / NR }'
但有时文件不包含模式,在这种情况下,我希望脚本返回零。对这个稍作修改的单线有什么想法吗?
【问题讨论】:
您通过产生一个额外的进程来完成第一个可以做的所有事情,从而增加了您的负载(平均)。一起使用 '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 }'
【讨论】:
grep,但也许你还想解决这个问题。