在Linux中如何做行不敏感差异(diff)?


0

我有两个文本文件,行的顺序无关紧要。我想找出一个文件与另一个文件中不同的行。在Linux中使用diff可以发现差异,但也可以解释同一文本行中的变化。

换句话说,我如何区分行不敏感?

Answers:


5

如果文件不是太大,则可以sortdiffing 之前将其保存。

所以这样的事情会工作:

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)

当然,如果您愿意,也可以考虑使用greplike

grep -vFxf file2 file1

这将处理线file2作为模式和只打印从file1中不具有匹配的线(-v处理从线(当)-ffile2作为固定的字符串(-F),必须在整个线匹配(-x)。

grep解决方案的优点是不需要对文件进行排序,但是它只检查其中一个文件中不在另一文件中的行,而不是一次检查两个方向中的行。


我强调comm需要排序的文件。(是的,您间接提到了它,但是很容易忽略您所说的方式)。此外,comm对于这种情况,它的效率要高得多diff。如果grep解决方案file2很大,则解决方案很容易用完内存(将NFA转换为DFA时出现指数级爆炸),我们不久前就对此提出了疑问。
dirkt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.