bash - MERGE 2 csv 文件使用 BASH 或 Awk 删除重复项
问题描述
我有 2 个 csv 文件,如下所示:
大集.csv
0,116070742,34991221138,false,2020-02-02 15:24:30,2020-02-01 03:03:30
0,116070741,34617138590,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070743,34603492144,false,2020-02-02 15:24:31,2020-02-02 15:24:31
Small_set.csv
0,116070777,34991221138,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070422,34617138999,false,2020-02-02 15:24:30,2020-02-02 15:24:30
要求:
我有 2 个不同大小的 csv 文件。我想通过匹配第 3 列(例如此处给出的 34991221138)并从 Large_set.csv 中删除重复项来合并 2 个 csv 文件。
预期结果:
0,116070777,34991221138,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070741,34617138590,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070743,34603492144,false,2020-02-02 15:24:31,2020-02-02 15:24:31
0,116070422,34617138999,false,2020-02-02 15:24:30,2020-02-02 15:24:30
我尝试使用cat Large_set.csv Small_set.csv > new_set.csv
,但我仍然无法从第一个文件中删除重复项。也检查了解决方案,但由于一些限制,我的要求是使用 bash 脚本或 awk(不是 python 或任何其他工具,如 csvmerge)。
解决方案
如果您不关心输出顺序,那么使用 GNU sort for -s
:
$ sort -t, -k3,3 -u -s small_set.csv large_set.csv
0,116070743,34603492144,false,2020-02-02 15:24:31,2020-02-02 15:24:31
0,116070741,34617138590,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070422,34617138999,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070777,34991221138,false,2020-02-02 15:24:30,2020-02-02 15:24:30
如果您确实关心,那么您必须告诉我们该输出顺序应该是什么,因为它在您的问题中并不明显。
推荐阅读
- python-3.x - 为多类 ML 分类模型选择信息量最大的分类特征
- angularjs - ng-class not working in one situation. What are some possible cause of this?
- f# - My F# code cannot read XML using XSD template
- html - 如何在文本覆盖扩展时扩展图像?
- oracle - 当我尝试运行我编写的 Oracle 存储过程时,出现 ORA-00933:SQL 命令未正确结束错误
- c# - MVVM 应用程序中用户配置数据的实用管理
- javascript - JS - 给定对象数组,我可以返回一个仅包含选定属性的数组吗?
- javascript - JavaScript 中的 Snake:我的蛇尾巴不能再长了
- python - 如何在同一个图上很好地缩放图形和向量场?[奇怪的鳞片]
- jquery - JQuery 函数在初始 getJSON 加载时未找到检查