我有两个文本文件,它们具有相同数量的换行符终止字符串。两个文件中的行彼此对应。每个文件中的行可能会重复。
我想快速确定哪两行不同,并从第一个文件或第二个文件输出。
文件A:
this is a string
this is another string
empty string
文件B:
this is A string
this is another string
Empty string
从文件 A 的角度来看,我想输出第一行和第三行,因为它们与文件 B 中的不同。同样,对于文件 B,我将输出该文件的第一行和第三行。
我比较文件的标准方法是对两个文件进行排序,然后使用comm
二进制文件,但排序会破坏两个文件之间的对应关系。我也尝试完成此任务,diff
但它看起来是为不同的任务而设计的。
也可以使用制表符分隔输出两个文件中不同的行。
答案1
这是从以下角度进行比较fileA
:
$ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileB fileA
this is a string
empty string
这种方法将整个读取fileB
到内存中。因此,如果您的文件很大(对于内存来说太大),您应该选择另一种方法。
同样,从 的角度获取输出fileB
:
$ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileA fileB
this is A string
Empty string
更高效的内存方法
这种方法一次只读取两行,因此内存效率更高。从以下角度来看FileA
:
$ awk '{a=$0;getline <"fileA";} $0!=a' fileB
this is a string
empty string
从以下角度来看fileB
:
$ awk '{a=$0;getline <"fileB";} $0!=a' fileA
this is A string
Empty string