首页 > 解决方案 > 如何使用 Awk 对包含逗号数据的选项卡文件的列进行求和和排序

问题描述

我有一个这样的标签文件,final_score.csv:

fufu  -2  map1,map3,map8
fifi  6   map5,map1
fofo  0   map4
lili  -9  map8,map1

我想创建一个像这样的其他选项卡文件:

map8  -11
map1  -5
map3  -2
map4  0
map5  6

所以我需要列出我所有的化合物,并将那些超过一次的化合物加起来,并对它们进行越来越多的排序。到目前为止,我有:

awk -F"\t" '{
  split($3,a,",");
  for(i=1; i in a; i++){
    print a[i],"\t",$2;
  }
}' final_score.csv > bla.csv

awk -F"\t" '$1 {sum+=$2} END {print $1,"\t",sum}' bla.csv

但它给了我:

map1  -11

我只有文件中的最后一个“地图”和数字列的总和,我该如何解决?

提前致谢

标签: awk

解决方案


awk+sort解决方案:

awk '{ len=split($3, a, ","); for(i=1;i<=len;i++) b[a[i]] += $2; delete a }
      END{ for(i in b) print i, b[i] }' yourfile | sort -k2

输出:

map8 -11
map3 -2
map1 -5
map4 0
map5 6

推荐阅读