基于唯一列awk汇总行
发布时间:2020-12-14 00:30:23 所属栏目:Linux 来源:网络整理
导读:我正在寻找一种更优雅的方法(超过 100列): awk '{a[$1]+=$4}{b[$1]+=$5}{c[$1]+=$6}{d[$1]+=$7}{e[$1]+=$8}{f[$1]+=$9}{g[$1]+=$10}END{for(i in a) print i,a[i],b[i],c[i],d[i],e[i],f[i],g[i]}' 这是输入: a1 1 1 2 2 a2 2 5 3 7 a2 2 3 3 8 a3 1 4 6 1
我正在寻找一种更优雅的方法(超过> 100列):
awk '{a[$1]+=$4}{b[$1]+=$5}{c[$1]+=$6}{d[$1]+=$7}{e[$1]+=$8}{f[$1]+=$9}{g[$1]+=$10}END{for(i in a) print i,a[i],b[i],c[i],d[i],e[i],f[i],g[i]}' 这是输入: a1 1 1 2 2 a2 2 5 3 7 a2 2 3 3 8 a3 1 4 6 1 a3 1 7 9 4 a3 1 2 4 2 并输出: a1 1 1 2 2 a2 4 8 6 15 a3 3 13 19 7 谢谢 :) 解决方法
我将单行内容分成几行,以便于阅读.
awk '{n[$1];for(i=2;i<=NF;i++)a[$1,i]+=$i} END{for(x in n){ printf "%s ",x for(y=2;y<=NF;y++)printf "%s%s",a[x,y],(y==NF?ORS:FS) } }' file 这个awk命令应该与你的100列文件一起使用. 用你的文件测试: kent$ cat f a1 1 1 2 2 a2 2 5 3 7 a2 2 3 3 8 a3 1 4 6 1 a3 1 7 9 4 a3 1 2 4 2 kent$ awk '{n[$1];for(i=2;i<=NF;i++)a[$1,i]+=$i}END{for(x in n){printf "%s ",x;for(y=2;y<=NF;y++)printf "%s%s",(y==NF?ORS:OFS)}}' f a1 1 1 2 2 a2 4 8 6 15 a3 3 13 19 7 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |