我有一个以下格式的文件

id_1,1,0,2,3,lable1
id_2,3,2,2,1,lable1
id_3,5,1,7,6,lable1

我想要每一列的总和(我有超过300列)
9,3,11,10,lable1

我怎么能用bash做到这一点。
我试着使用所描述的here但没有成功。

最佳答案

如果需要按最后一列中的标签对总计进行分组,可以尝试执行以下操作:

awk -F, '
  {
    L[$NF]
    for(i=2; i<NF; i++) T[$NF,i]+=$i
  }
  END{
    for(i in L){
      s=i
      for(j=NF-1; j>1; j--) s=T[i,j] FS s
      print s
    }
  }
' file

如果最后一列中的标签已排序,则可以尝试不使用数组并节省内存:
awk -F, '
  function labelsum(){
    s=p
    for(i=NF-1; i>1; i--) s=T[i] FS s
    print s
    split(x,T)
  }
  p!=$NF{
    if(p) labelsum()
    p=$NF
  }
  {
    for(i=2; i<NF; i++) T[i]+=$i
  }
  END {
    labelsum()
  }
' file

关于bash - 如何使用bash对文件中的每一列求和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14956264/

10-12 00:43