我有两个文本文件,其中行的顺序无关紧要。我想找出一个文件中与另一个文件中不同的行。在 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
带有进程替换的命令sort
(comm
要求对它操作的文件进行排序)。这样您就可以只关注常见的行,只关注一个文件中的行或另一个文件中的行,方法是使用-1
仅在第一个文件中抑制行,-2
仅在第二个文件中抑制行或-3
同时抑制两个文件中的行,因此要查看仅在第一个文件中而不是第二个文件中的所有行,您可以执行
comm -23 <(sort file1) <(sort file2)
当然,如果你想要的话,你也可以考虑grep
使用
grep -vFxf file2 file1
它将把中的行视为file2
模式,并仅打印 file1 中没有匹配项的行 ( ),同时将 ( )-v
中的行视为必须与整行匹配的固定字符串 ( )。-f
file2
-F
-x
该grep
解决方案的优点是不需要对文件进行排序,但它只检查一个文件中不存在的另一个文件中的行,而不是同时在两个方向上检查。