如何找出一个文件中不存在的另一个文件中的行?

如何找出一个文件中不存在的另一个文件中的行?

我有两个文件 A 和 B。

我想找出文件 B 中哪些行在文件 A 中不存在。

我该怎么做?这些行可以位于文件 A 中的任何位置。

答案1

简单地

grep -vxf A B

如果您还想要不匹配行的行号:

grep -nvxf A B

如果 B 有多个不匹配的相同行,并且你只想打印出一次相同的行,那么

grep -vxf A B | sort | uniq  

答案2

你可以使用 sdiff 命令。用法:sdiff file1.txt file2.txt

您可以在任何地方使用这些线条。

哪些是不常见的线条,它们将用>符号表示。请看下图。示例:

在此处输入图片描述

答案3

您说线可以位于任何位置,但如果位置对您来说并不重要(只是想知道差异),请使用comm

   Compare sorted files FILE1 and FILE2 line by line.

   With  no  options,  produce  three-column  output.  Column one contains
   lines unique to FILE1, column two contains lines unique to  FILE2,  and
   column three contains lines common to both files.

它需要对文件进行排序,幸运的是sort可以帮助解决这个问题。您可以sort A > A.sorted对其进行排序,对 B 执行类似操作,然后:

comm -1 -3 A.sorted B.sorted

这将打印“FILE2独有的行”,在本例中是B.sorted。

您也可以在线进行排序,命令输入起来有点麻烦,但可以节省几个步骤:

comm -1 -3 <(sort A) <(sort B)

相关内容