首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对行进行计数,并对特定列求和

对行进行计数,并对特定列求和
EN

Stack Overflow用户
提问于 2017-07-10 16:03:53
回答 1查看 222关注 0票数 1

如果有人能帮助我完成这项任务,我将不胜感激。我希望用awk做到这一点,但如果有比awk更好的策略,我也想知道。

这是infile

代码语言:javascript
运行
复制
S,0,3118,*,0,*,*,*,10-2,c645,5
H,0,648,99.2,+,0,0,250I648M2220I,10-2,c4204,1
H,0,597,99.2,+,0,0,314I597M2207I,10-2,c4022,1 
S,1,2488,*,0,*,*,*,10-2,c17,4
H,1,798,97.4,+,0,0,1407I798M283I,10-2,c232,2
H,1,796,98,+,0,0,628I796M1064I,10-2,c67,1
H,1,751,97.5,-,0,0,668I144M3D290MD313M1073I,10-2,c115,1
H,1,792,98.4,+,0,0,628I792M1068I,10-2,c380,1
S,2,2437,*,0,*,*,*,10-2,c102,7
S,3,2218,*,0,*,*,*,10-2,c1081,10
H,3,928,99.2,-,0,0,3D925M1293I,10-2,c986,3

我想要的输出是,

输出文件

代码语言:javascript
运行
复制
0,3,7
1,5,9
2,1,7
3,2,13

因此,如果infile的第二列相同,则计算行数(outfile的第二列)和最后一列(outfile的第三列)的总和。

我试过了

代码语言:javascript
运行
复制
awk -F',' '{a[$2] += $11}; END{for(c in a) print c, a[c]}' < infile

但是我不知道怎么把行数加在一起。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-10 16:11:20

简单的Awk命令,带有对$2值进行散列的逻辑。一次用于跟踪第二个列值的出现次数,一次用于最后一个字段的总和。它是这样的

代码语言:javascript
运行
复制
awk 'BEGIN{FS=OFS=","}{unique[$2]++; uniqueSum[$2]+=$NF}END{for (i in unique) print i,unique[i],uniqueSum[i]}' file

这将为您提供所需的输出。BEGIN{FS=OFS=","}部分负责将输入和输出字段分隔符设置为,,而{unique[$2]++; uniqueSum[$2]+=$NF}部分用于散列$2中唯一ID值的计数及其在最后一列中的合计值。END子句在处理完所有行之后运行。因此,我们打印唯一的列,它的计数和它的总和,以获得您需要的输出。

代码语言:javascript
运行
复制
0,3,7
1,5,9
2,1,7
3,2,13
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45006735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档