【问题标题】:awk calculate average or zeroawk 计算平均值或零
【发布时间】:2011-12-08 16:12:01
【问题描述】:

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

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

但有时文件不包含模式,在这种情况下,我希望脚本返回零。对这个稍作修改的单线有什么想法吗?

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    您通过产生一个额外的进程来完成第一个可以做的所有事情,从而增加了您的负载(平均)。一起使用 'grep' 和 'awk' 是一个危险信号。你最好写:

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 其他答案已经指出了无用的grep,但也许你还想解决这个问题。
        猜你喜欢
        • 2013-01-14
        • 2017-05-26
        • 1970-01-01
        • 2022-11-21
        • 1970-01-01
        • 1970-01-01
        • 2014-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多