对每列bash中的所有值求和

时间:2018-04-22 21:24:10

标签: bash csv sum multiple-columns

我有一个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

有没有办法实现我想要的目标?

非常感谢!

2 个答案:

答案 0 :(得分:1)

  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/ /,/'
    
  3. 输出:

    SUM,14,23,14,17
    

答案 1 :(得分:0)

你快到了。 用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