合并具有相似ID的行并将相应的值相加

时间:2016-07-18 16:37:54

标签: perl awk

我想组合相似的行来创建一个独特的输出矩阵,该矩阵将-符号后的计数求和。请参阅下面的示例:

278-3192 NC_002188.1
310-2831 NC_007653.1
384-2206 NC_004068.1
1059-573 NC_004068.1

输出

NC_002188.1 3192
NC_007653.1 2831
NC_004068.1 2779

2 个答案:

答案 0 :(得分:3)

您可以使用awk的关联数组:

awk '{split($1,a, "-"); arr[$2]+=a[2]} END{for(i in arr) print i, arr[i]}' file

答案 1 :(得分:2)

如果记录已按NC_xxxx编号排序,则可以不使用数组进行排序(您也可以在使用sort之前对文件进行排序)

awk -F'[- ]' 'o!=$3{print o,s;o=$3;s=$2;next}{s+=$2}END{print o,s}' file