我有一个这样的标签文件,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
我只有文件中的最后一个“地图”和数字列的总和,我该如何解决?
预先感谢
答案 0 :(得分:2)
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
答案 1 :(得分:0)
直接对输出进行排序的GNU awk版本:
$ gawk '{ split($3, a, ","); for (i in a) b[a[i]] += $2 }
END { PROCINFO["sorted_in"] = "@val_num_asc"; OFS="\t";
for (i in b) print i, b[i] }' final_score.tsv
map8 -11
map1 -5
map3 -2
map4 0
map5 6