gpt4 book ai didi

awk - 基于唯一列 awk 对行求和

转载 作者:行者123 更新时间:2023-12-04 23:51:13 24 4
gpt4 key购买 nike

我正在寻找一种更优雅的方式来做到这一点(超过 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", a[x,y],(y==NF?ORS:OFS)}}' f
a1 1 1 2 2
a2 4 8 6 15
a3 3 13 19 7

关于awk - 基于唯一列 awk 对行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21785266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com