如何在 Linux 中执行不区分行的差异 (diff)?

如何在 Linux 中执行不区分行的差异 (diff)?

我有两个文本文件,其中行的顺序无关紧要。我想找出一个文件中与另一个文件中不同的行。在 Linux 中使用 diff 可以找到差异,但也会解释同一文本行的变化。

换句话说,我该如何实现不区分行的差异?

答案1

如果您的文件不是太大,您可以在阅读sort之前将它们diff删除。

因此这样的事情会起作用:

sort file1 > file1_sorted
sort file2 > file2_sorted
diff file1_sorted file2_sorted

或者,正如您在评论中发现的那样,您也可以在一行中完成此操作,

diff <(sort file1) <(sort file2)

答案2

与选项类似,diff您可以使用comm带有进程替换的命令sortcomm要求对它操作的文件进行排序)。这样您就可以只关注常见的行,只关注一个文件中的行或另一个文件中的行,方法是使用-1仅在第一个文件中抑制行,-2仅在第二个文件中抑制行或-3同时抑制两个文件中的行,因此要查看仅在第一个文件中而不是第二个文件中的所有行,您可以执行

comm -23 <(sort file1) <(sort file2)

当然,如果你想要的话,你也可以考虑grep使用

grep -vFxf file2 file1

它将把中的行视为file2模式,并仅打印 file1 中没有匹配项的行 ( ),同时将 ( )-v中的行视为必须与整行匹配的固定字符串 ( )。-ffile2-F-x

grep解决方案的优点是不需要对文件进行排序,但它只检查一个文件中不存在的另一个文件中的行,而不是同时在两个方向上检查。

相关内容