linux - 检查 csv 文件中列的任何值是否存在于第二个 csv 文件的列中
问题描述
我想比较两个 csv 文件中的列。基本上检查一列中的任何值是否存在于另一列中。如果它们确实存在,则打印出任何此类值。
例如:文件1:
ID | 价值 |
---|---|
美国广播公司 | 789 |
电子烟 | 766 |
嗨 | 456 |
文件2:
ID | 价值 |
---|---|
荷航 | 789 |
无 | 766 |
美国广播公司 | 456 |
我需要比较 file1 'id' 列中是否存在 file2 'id' 列中的任何值。在上面的示例中,“abc”是一个重复的值,需要打印出来。
是否有可以执行此操作的 bash 脚本?
解决方案
使用 awk:
awk -F, 'FNR==1 { next } NR==FNR { map[$1]=$2;next } map[$1]!="" { print;print $1"\t"map[$1] } ' file1 file2
如果行号为 1 (FNR==1),则跳到下一行。处理第一个文件 (NR=FNR) 时,创建一个数组映射,其中第一个空格分隔字段作为索引,第二个字段作为值。然后,在处理第二个文件时,如果 map 中的第一个字段有条目,则打印该行以及 map 数组中的条目。
推荐阅读
- date - 从 NSIS 中的时间戳获取日期
- angular - MatDialog Angular开放组件?
- binary-tree - 传销软件中如何根据左右点值生成盈利价格
- python - 带有名称和输入的 if 语句
- bootstrap-4 - 如何防止模态隐藏垂直滚动条
- javascript - 无法弄清楚如何更新量表 [Javascript / D3.js]
- java - 从 JSON Schema 动态创建 Swing GUI(使用 Metawidget)
- laravel - Laravel 上传图片“控制器”
- c# - ObservableCollection 更新不影响自定义列表视图?
- python-3.x - 当时间随日期更改时如何添加额外的时间列