【问题标题】:How to sum up multi-line of output of numbers? [duplicate]如何总结多行输出的数字? [复制]
【发布时间】:2013-12-24 02:27:07
【问题描述】:

我有一些 shell 脚本的多行输出,每行一个整数。喜欢:

12
11
55
337
11
34

问题是,我如何用 shell 命令总结这些数字?我试过sum,但它没有达到预期的效果:

<some_shell_scripts> |sum
36373     2 

在 ksh 或 bash 中有什么简单的解决方案吗?

【问题讨论】:

    标签: bash ksh


    【解决方案1】:

    将所有的 '\n' 替换为 '+' 通过 sed 然后 bc

    <some_shell_scripts> | sed ':a;N;$!ba;s/\n/+/g' | bc
    

    【讨论】:

    • 第一个sed表达式是什么意思?
    • 这是我得到的:sed: 0602-417 The label :a;N;$!ba;s/\n/+/g is greater than eight characters
    • @QiangXu 你有什么意见?这里没关系。我只是复制输入,然后 cat 然后 sed 然后 bc。
    • 还是同样的错误。看起来它与输入无关,例如,有多少行整数,但可能是我的 sed 版本和你的不一样? sed --version 在这里对我不起作用。但看起来我的不是 GNU sed。我的sed 是 AIX 机器自带的。
    【解决方案2】:

    使用awk,您可以使用类似这样的代码:

    $ awk '{count+=$1} END{print count}' file
    460
    

    bash:

    sum=0
    while read number
    do
      sum=$(($sum + $number))
    done < file
    echo $sum
    

    测试:

    $ sum=0; while read number; do sum=$(($sum + $number)); done < file
    $ echo $sum
    460
    

    【讨论】:

      【解决方案3】:

      使用bc 进行命令行计算,awk 太过分了。

      例如:

      echo "23 + 23 + 23" | bc
      69
      

      【讨论】:

        【解决方案4】:

        通过管道传递给 awk:

        <some_shell_scripts> | awk 'NF{sum+=$1} END {print sum}'
        

        【讨论】:

          猜你喜欢
          • 2021-01-09
          • 2019-12-20
          • 2012-10-22
          • 1970-01-01
          • 1970-01-01
          • 2013-03-14
          • 2013-12-31
          • 2014-03-05
          相关资源
          最近更新 更多