【问题标题】:read from file and add numbers从文件中读取并添加数字
【发布时间】:2010-04-03 20:01:53
【问题描述】:

我有一个文本文件,其中包含类似的条目 123 112 3333 44 2

如何将这些数字相加并得到它们的总和。

【问题讨论】:

  • @Basilevs Bash.

标签: bash add


【解决方案1】:

例子:

$ cat numbers.txt
123 112 3333 44 2

$ SUM=0; for i in `cat numbers.txt`; do SUM=$(($SUM + $i)); done; echo $SUM
3614

另请参阅:Bash Programming Introduction, section on arithmetic evaluation

另一种方法是使用bc,一种任意精度的计算器语言:

$ echo '123 112 3333 44 2' | tr ' ' '\n' | paste -sd+ | bc
3614

粘贴通常是在线的,所以我们需要tr

【讨论】:

    【解决方案2】:

    MYYN 的答案的仅 Bash(无 cat)变体。

    sum=0; for i in $(<number_file); do ((sum += i)); done; echo $sum
    

    另外,请注意更简单的算术语句。

    【讨论】:

    • 对于 OP 的示例数据,是的,它有效。但在涉及十进制数字/浮点数时则不然。
    【解决方案3】:

    只需一个 awk 命令即可。当您还要添加小数时,它也不会中断。

    awk '{for(i=1;i<=NF;i++)s+=$i}END{print s}' file
    

    【讨论】:

      【解决方案4】:

      或者在 Awk 中

      echo "123 112 3333 44 2" | awk 'BEGIN {sum=0} {for(i=1; i<=NF; i++) sum+=$i } END {print sum}'
      

      或者如果它在一个文件中

      cat file.txt | awk 'BEGIN {sum=0} {for(i=1; i<=NF; i++) sum+=$i } END {print sum}'
      

      我发现 Awk 更容易阅读/记住。虽然“Dave Jarvis”解决方案特别简洁!

      【讨论】:

        猜你喜欢
        • 2021-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-21
        • 1970-01-01
        • 1970-01-01
        • 2016-06-25
        • 1970-01-01
        相关资源
        最近更新 更多