请考虑以下文件和差异结果:
a1.txt
a
b
My name is Iana2.txt
a
a
b
My name is John运行diff --side-by-side --suppress-common-lines a1.txt a2.txt会产生:
> a
My name is Ian | My name is John它正确地声明a是在a2.txt中添加的,My name is Ian更改为My name is John。
但是,如果从两个文件中删除b,则生成的结果是不同的:
b1.txt
a
My name is Ianb2.txt
a
a
My name is John运行diff --side-by-side --suppress-common-lines b1.txt b2.txt会产生:
My name is Ian | a
> My name is John这说明My name is Ian行更改为a,My name is John被添加到b2.txt中。
尽管第二次比较的结果在技术上是有效的,但a1.txt和a2.txt之间的差异相当于b1.txt和b2.txt的差异,那么为什么结果不相等呢?
我能做些什么,使第二个比较产生与第一个输出相同的结果吗?
发布于 2015-09-07 09:01:11
您观察到的两个示例之间的差异是正常的;它只是与您对diff所做的事情的期望相冲突。实用程序解决了最长公共子序列问题,使用线作为单位/原子。
..。
a1.txt和a2.txt的区别相当于b1.txt和b2.txt的区别,那么为什么结果不相等呢?
在这里,两个示例中最长的公共子序列是不同的,粗略地说,不要以相同的方式“排列”。在第一个例子中,您有
# a1.txt # a2.txt # line in common?
a n
a a y
b b y
My name is Ian My name is John n然而,在第二个例子中,
# b1.txt # b2.txt # line in common?
a a y
My name is Ian a n
My name is John n因此,就diff而言,这两对文件之间的差异并不相等。diff没有内存,您为获取b[12].txt文件所做的一切就是从每个a[12].txt文件中删除b行。它所看到的是,最长的公共子序列现在只包含一个包含a的行,并由此推断出两个b[12].txt文件之间的区别。
我能做些什么,使第二个比较产生与第一个输出相同的结果吗?
除了使用不同的diff算法(或实现您自己的算法)之外,我不这么认为。
https://stackoverflow.com/questions/32434272
复制相似问题