考虑以下文件和差异结果:
a1.txt
a
b
My name is Ian
a2.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 Ian
b2.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
,所以为什么结果不相等?
我能做些什么,使第二个比较产生与第一个比较相同的输出?
您在两个示例之间观察到的差异是正常的;它只是与您的期望冲突diff
。该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
文件所要做的就是b
从每个文件中删除该行a[12].txt
。它所看到的是,现在最长的公共子序列仅包含在包含的一行中a
,并由此推断出两个b[12].txt
文件之间的差异。
我能做些什么,使第二个比较产生与第一个比较相同的输出?
缺少使用其他差异算法(或实现自己的差异算法)的想法,我不这么认为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句