使用awk对类似行的求和值

时间:2014-08-12 10:03:22

标签: awk

从下面的示例中,我想总结TargetsmiRNA相似的行的得分:请参阅下文。

 Target       miRNA                 Score
 NM_198900    hsa-miR-423-5p       -0.244
 NM_198900    hsa-miR-423-5p       -0.6112
 NM_1989230   hsa-miR-413-5p       -0.644
 NM_1989230   hsa-miR-413-5p       -0.912

输出:

NM_198900      hsa-miR-423-5p       -0.8552
NM_1989230     hsa-miR-413-5p       -1.556

1 个答案:

答案 0 :(得分:4)

像这样:

awk '{x[$1 " " $2]+=$3} END{for (r in x)print r,x[r]}' file

当它看到每一行时,它将第三个字段($3)添加到数组x[]中,并通过连接字段1和2以及它们之间的空格来索引。最后,它会打印x[]的所有元素。

按照@ jaypal的建议,您可能更喜欢保留标题行(NR == 1)并使用TAB作为输出字段分隔符

awk 'NR==1{OFS="\t";print;next} {x[$1 OFS $2]+=$3} END{for (r in x)print r,x[r]}' file