linux 上获取文件中相同部分、不相同部分的优雅方式

在 Linux 中,可以使用 comm 命令来比较两个文件并列出它们之间的差异。comm 命令需要两个已经排过序的文件作为输入,并可以输出它们之间相同行、不同行以及仅在其中一个文件中的行,具体如下:

comm [option] file1 file2
其中,option 参数可以是以下三个选项之一:

-1:禁止输出仅在文件 1 中存在的行。
-2:禁止输出仅在文件 2 中存在的行。
-3:禁止输出同时出现在两个文件中的行。
如果没有指定任何选项,则 comm 命令会同时输出三个部分:只出现在文件 1 中的行、只出现在文件 2 中的行以及同时出现在两个文件中的行。

接下来我们分别列出两个文件之间相同和不相同的部分。

假设有两个文件 file1 和 file2,它们的内容分别如下:

$ cat file1
apple
pear
orange
banana
grape

$ cat file2
apple
peach
orange
watermelon
相同部分
要输出两个文件之间相同的部分(即只包含同时出现在两个文件中的行),可以执行以下命令:

comm -12 <(sort file1) <(sort file2)
命令说明:

<:将一个命令的输出作为另一个命令的输入。
sort:按字典序排列文件内容。
-12:仅输出同时出现在两个文件中的行。
运行结果如下:

apple
orange
不相同部分
要输出两个文件之间不相同的部分,可以执行以下命令:

comm -3 <(sort file1) <(sort file2)
命令说明:

-3:同时输出不同的行和仅出现在一个文件中的行。
运行结果如下:

banana
grape
peach
watermelon
其中,以 TAB 键开头的行表示只在某个文件中出现的行。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容