首页 > 解决方案 > 检查 csv 文件中列的任何值是否存在于第二个 csv 文件的列中

问题描述

我想比较两个 csv 文件中的列。基本上检查一列中的任何值是否存在于另一列中。如果它们确实存在,则打印出任何此类值。

例如:文件1:

ID 价值
美国广播公司 789
电子烟 766
456

文件2:

ID 价值
荷航 789
766
美国广播公司 456

我需要比较 file1 'id' 列中是否存在 file2 'id' 列中的任何值。在上面的示例中,“abc”是一个重复的值,需要打印出来。

是否有可以执行此操作的 bash 脚本?

标签: linuxbashunix

解决方案


使用 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 数组中的条目。


推荐阅读