【问题标题】:How Can I calculate the sum of a specific column using bash?如何使用 bash 计算特定列的总和?
【发布时间】:2016-06-14 19:29:13
【问题描述】:

我想使用 bash 计算特定列的总和,而不使用打印该特定列(我想保留管道的所有输出列并且只对其中一个列求和!)

【问题讨论】:

  • 显示示例,几行输入和所需的输出。

标签: bash sum


【解决方案1】:

如果您想对第二列求和,但要打印某个管道中的所有列:

cat data | awk '{sum+=$2 ; print $0} END{print "sum=",sum}'

如果文件数据看起来像:

1 2 3
4 5 6
7 8 9

那么输出将是:

1 2 3
4 5 6
7 8 9
sum= 15

【讨论】:

    【解决方案2】:

    您想逐步对一列进行连续求和吗?

    必须是bash 还是你可以使用awk

    # file 'fields.txt':
    1 foo
    2 bar
    10 baz
    8 boz
    
    # Step by step sum the first column:
    awk '{s+=$1; print s, $2}' < fields.txt
    
    # Output:
    1 foo
    3 bar
    13 baz
    21 boz
    

    【讨论】:

      【解决方案3】:

      假设输入数据与@John1024 相同,您可以使用良好的cutpaste 以及一些 算术:

      $ cat data | echo $(( $( cut -d' ' -f2 | paste -s -d+ - ) ))
      15
      $ 
      

      这里的技巧是告诉paste 插入+ 作为分隔符,然后对结果表达式使用$(( )) 执行bash 算术。

      请注意,我只是 cating 输入数据用于说明目的 - 它可以从另一个来源通过管道传输,或者也可以将数据文件直接传递给 cut

      【讨论】:

        【解决方案4】:
        awk '{sum+=$1;} END { print "Total of 1st Column:" sum }1' abc.t6RrMm 
        

        给定一个类似的文件:

        12 12 12 
        1  1  1
        2  2  1
        0  1  2
        

        第一列的总数是15

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-20
          • 1970-01-01
          • 2020-12-15
          • 2016-02-06
          • 1970-01-01
          • 2022-01-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多