如果有人能帮助我完成这项任务,我将不胜感激。我希望用awk做到这一点,但如果有比awk更好的策略,我也想知道。
这是infile
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
我想要的输出是,
输出文件
0,3,7
1,5,9
2,1,7
3,2,13
因此,如果infile的第二列相同,则计算行数(outfile的第二列)和最后一列(outfile的第三列)的总和。
我试过了
awk -F',' '{a[$2] += $11}; END{for(c in a) print c, a[c]}' < infile
但是我不知道怎么把行数加在一起。
发布于 2017-07-10 16:11:20
简单的Awk
命令,带有对$2
值进行散列的逻辑。一次用于跟踪第二个列值的出现次数,一次用于最后一个字段的总和。它是这样的
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
子句在处理完所有行之后运行。因此,我们打印唯一的列,它的计数和它的总和,以获得您需要的输出。
0,3,7
1,5,9
2,1,7
3,2,13
https://stackoverflow.com/questions/45006735
复制相似问题