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

2023-05-14  本文已影响0人  秸秆混凝烧结工程师

在 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 键开头的行表示只在某个文件中出现的行。

上一篇下一篇

猜你喜欢

热点阅读