使用 shell 命令打印两个文件中的公共行

使用 shell 命令打印两个文件中的公共行

例如,我有两个文件。文件 1 包含:

12
13
14
15

文件2包含:

13,abc,xyz
14,def,ghi
15,klm,opq

file3 中的预期输出:

13,abc,xyz
14,def,ghi
15,klm,opq

我在一台 Linux 机器上。命令是什么?

答案1

严格来说,我们对共同点不感兴趣线(给定数据中没有公共线),但在基于第一列的数据的交集中。

使用join

$ join -t, File1 File2
13,abc,xyz
14,def,ghi
15,klm,opq

join公用事业公司做了一个有效的关系(内部)JOIN两个文件之间的操作,每个文件都有自己的字段(默认情况下是第一个字段)。我用它-t ,告诉它逗号是文件中的字段分隔符(否则它使用任何空格)。默认情况下,该命令将根据两个文件的第一个字段创建交集。

请注意,这两个文件都需要在连接字段(第一列)上进行排序,它们似乎出现在问题中。如果它们没有排序,您可以使用以下命令即时对它们进行排序

join -t, <( sort File1 ) <( sort File2 )

如果您的 shell 支持进程替换。

相关内容