【问题标题】:Sum all values in each column bash对每列bash中的所有值求和
【发布时间】:2018-04-22 21:24:10
【问题描述】:

我有一个 csv 文件,如下所示:

ID_X,1,2,7,8
ID_Y,6,9,3,5
ID_Z,7,12,4,4

我的目标是创建一个 csv 文件,其中包含每一列(从第二列开始)中所有值的总和,因此在这种情况下,该文件将如下所示:

SUM,14,23,14,17

到目前为止,我可以使用 awk 一次完成一列。例如,对于带有数字的第一列:

awk 'BEGIN {FS=OFS=","} ; {sum+=$2} END {print sum}' test.txt
14

有什么方法可以实现我想要的吗?

非常感谢!

【问题讨论】:

    标签: bash csv sum multiple-columns


    【解决方案1】:

    你快到了。 使用 awk 你可以说:

    awk ' BEGIN {FS=OFS=","}
    {for (i=2; i<=NF; i++) {sum[i]+=$i} len=NF}
    END {$1="SUM"; for (i=2; i<=len; i++) $i=sum[i]; print}
    ' file.csv
    

    【讨论】:

      【解决方案2】:
      1. 使用datamash:

        echo -n SUM,; datamash -t,  sum 2,3,4,5 < file.csv
        
      2. 使用numsum

        printf 'SUM%.0s,%s,%s,%s,%s\n' `numsum -s, -c  file.csv` 
        

        或者,如果 file.csv 中的列数是可变的:

        numsum -s, -c  file.csv | sed 's/^0/SUM/;y/ /,/'
        

      输出:

      SUM,14,23,14,17
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        相关资源
        最近更新 更多