我有一个以下格式的文件
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/