使用awk的类似行的和值

使用awk的类似行的和值,awk,Awk,从下面的例子中,我想对目标和miRNA相似的行的分数求和:请参见下文 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 输出:

从下面的例子中,我想对
目标
miRNA
相似的行的分数求和:请参见下文

 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
像这样:

awk '{x[$1 " " $2]+=$3} END{for (r in x)print r,x[r]}' file
当它看到每一行时,它会将第三个字段(
$3
)添加到一个数组
x[]
,通过在字段1和字段2之间加一个空格进行索引。最后,它将打印
x[]
的所有元素

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

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

awk '{x[$1 " " $2]+=$3} END{for (r in x)print r,x[r]}' file
当它看到每一行时,它会将第三个字段(
$3
)添加到一个数组
x[]
,通过在字段1和字段2之间加一个空格进行索引。最后,它将打印
x[]
的所有元素

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

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

你的文件分类了吗?可以排序吗?你可以排序,是的。你的文件排序了吗?可以排序吗?您可以排序,可以。+1:您可能希望按原样打印标题行,并从第二行开始添加。另外,将
subsp
变量设置为
FS
允许您使用更干净的组合键形式
x[$1,$2]
@jaypal:是的,谢谢。我做了相应的修改。+1:您可能希望按原样打印标题行,并从第二行开始添加。另外,将
subsp
变量设置为
FS
允许您使用更干净的组合键形式
x[$1,$2]
@jaypal:是的,谢谢。我已作出相应的修订。