awk - 如何使用 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
+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
推荐阅读
- c# - 实体框架 - 如何删除具有两个外键的实体
- c# - 打开 txt 文件,取 x,y 值并用它们做图
- docker - 如何将 Quarkus 中的测试容器连接到 DevServices 的 Docker 网络?
- powershell - 如何使用 powershell SharePointPnPPowerShellOnline 模块将本地保存的文件上传到共享点?
- node.js - 使用 Ajax 在 HTML 页面中从 nodejs/MongoDB 获取数据
- laravel - 如何在 Laravel 中使用自引用关系返回有孩子(整个家庭)的父母
- python - Python web scraper 似乎返回旧结果
- python-3.x - 多处理一次计算多个文本文件中的频率
- c++ - 这是我使用龟兔算法在链表中查找中间元素的逻辑
- firebase - Firebase 身份验证是否适用于 Unity 2020 for Desktop 版本?