基于唯一列awk汇总行

基于唯一列awk汇总行,第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 我正在寻找一种更优雅的方法(超过> 100列):

awk '{a[]+=}{b[]+=}{c[]+=}{d[]+=}{e[]+=}{f[]+=}{g[]+=}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[];for(i=2;i<=NF;i++)a[,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 fa1 1   1   2   2a2 2   5   3   7a2 2   3   3   8a3 1   4   6   1a3 1   7   9   4a3 1   2   4   2kent$ awk '{n[];for(i=2;i<=NF;i++)a[,i]+=$i}END{for(x in n){printf "%s ",x;for(y=2;y<=NF;y++)printf "%s%s",(y==NF?ORS:OFS)}}' fa1 1 1 2 2a2 4 8 6 15a3 3 13 19 7
总结

以上是内存溢出为你收集整理的基于唯一列awk汇总行全部内容,希望文章能够帮你解决基于唯一列awk汇总行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1023617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存