我想逐行比较两个文件而不进行排序并仅显示与文件 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) 的时间。