比较两个CSV文件,使用前三列作为标识符,然后打印公共行



我有两个CSV文件。文件1有9861行和4列,而文件2有6037行和5列。

是文件。

文件1

的链接

文件2

的链接

前三列分别是数年,几个月,几天。

我想在文件1中使用相同标识符在文件2中获取行,然后将其打印到文件3。

我从这里的某些帖子找到了此命令,但这仅使用一个列作为标识符:

awk -F, 'NR==FNR {a[$1]=$0;next}; $1 in a {print a[$1]; print}' file1 file2

有没有办法使用尴尬或任何简单命令来执行此操作,我可以将前三列用作标识符?

不感谢任何帮助。

只需使用更多列来使您需要的唯一性:

$ awk -F, 'NR==FNR {a[$1, $2, $3] = $0; next}
           $1 SUBSEP $2 SUBSEP $3 in a' file1 file2

SUBSEP是下标分隔符。它具有" 034"的默认值,用于分离多维数组的索引的各个部分。因此,表达式foo["A", "B"]确实访问foo["A34B"]

awk -F, '{k=$1 FS $2 FS $3} NR==FNR{a[k];next} k in a' file1 file2

当然没有测试,因为您没有提供任何样本输入/输出。

最新更新