逐行比较两个文件并仅显示与文件 2 的不同之处

逐行比较两个文件并仅显示与文件 2 的不同之处

我想逐行比较两个文件而不进行排序并仅显示与文件 2 的差异。

文件1.txt

one
two
three
four
five
six
seven
eight
nine
ten

文件2.txt

one
five
three
four
five
twelve
seven
eight
hundred
ten

然后输出应该是

five 
twelve
hundred

我不想对文件进行排序。

答案1

使用 进行逐行比较awk,您可以执行以下操作:

awk '{ getline x<"file2" } $0!=x{ print x}' file1
  • getline x<"file2"读取整行文件2并保持X多变的。
  • print x当文件 1 中的行与文件 2 中的行不同时。

或者相同但更短:

awk '{ getline x<"file1" } $0!=x' file2

答案2

您也可以使用diff对于该任务:

diff --old-line-format="" --unchanged-line-format="" 1.txt 2.txt 

给出以下输出:

five
twelve
hundred

答案3

如果不对数据进行排序,就无法做到这一点。即使你从未明确运行该sort命令,任何解决方案将要涉及索引或排序数据,并需要花费 O(n) 的时间或内存来完成。例如,遍历文件并跟踪哪些行可见或不可见的解决方案将占用 O(n) 内存,而先对文件进行排序的解决方案将占用 O(n) 的时间。

相关内容