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

Bash 比较两个csv文件,使用前三列作为标识符,然后打印公用行,bash,csv,awk,Bash,Csv,Awk,我有两个csv文件。文件1有9861行和4列,而文件2有6037行和5列 前三列分别为年、月、日 我想获得文件2中具有文件1中相同标识符的行,并将其打印到文件3中 我在这里的一些帖子中找到了这个命令,但它只使用一列作为标识符: awk -F, 'NR==FNR {a[$1]=$0;next}; $1 in a {print a[$1]; print}' file1 file2 有没有一种方法可以使用awk或任何更简单的命令来实现这一点,我可以使用前三列作为标识符 非常感谢您的帮助。只需使用

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

前三列分别为年、月、日

我想获得文件2中具有文件1中相同标识符的行,并将其打印到文件3中

我在这里的一些帖子中找到了这个命令,但它只使用一列作为标识符:

awk -F, 'NR==FNR {a[$1]=$0;next}; $1 in a {print a[$1]; print}' file1 file2
有没有一种方法可以使用awk或任何更简单的命令来实现这一点,我可以使用前三列作为标识符


非常感谢您的帮助。

只需使用更多的列,以实现您所需的唯一性:

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

是下标分隔符。它的默认值为“\034”,用于分隔多维数组的索引部分。因此,表达式
foo[“A”,“B”]
实际上访问
foo[“A\034B”]

只需使用更多的列即可实现所需的唯一性:

$ awk -F, 'NR==FNR {a[$1, $2, $3] = $0; next}
           $1 SUBSEP $2 SUBSEP $3 in a' file1 file2
subsp
是下标分隔符。它的默认值为“\034”,用于分隔多维数组的索引部分。因此,表达式
foo[“A”,“B”]
实际上访问
foo[“A\034B”]

当然没有经过测试,因为您没有提供任何示例输入/输出


当然未测试,因为您没有提供任何示例输入/输出。

是否有方法仅将匹配的输出与文件2隔离?确定,没有问题。再次感谢您的帮助。有没有办法仅从文件2中隔离匹配的输出?好的,没问题。再次感谢您的帮助。下次当您有问题时,请包括一个简洁、可测试的示例输入和预期输出。有关更多信息,请参阅。指向大文件的链接通常没有用处,很多人甚至都不会点击它们——将您的示例减少到每个文件大约六行(即最少),人们会更愿意查看它,并包含预期的输出,因为输入可以消除大多数需求的模糊性。@EdMorton。谢谢你的提示。我会记住这一点。下次当你有问题时,请包括一个简洁、可测试的样本输入和预期输出。有关更多信息,请参阅。指向大文件的链接通常没有用处,很多人甚至都不会点击它们——将您的示例减少到每个文件大约六行(即最少),人们会更愿意查看它,并包含预期的输出,因为输入可以消除大多数需求的模糊性。@EdMorton。谢谢你的提示。我会记住这一点。