Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 等效变更的差异结果不一致_Shell_Diff - Fatal编程技术网

Shell 等效变更的差异结果不一致

Shell 等效变更的差异结果不一致,shell,diff,Shell,Diff,考虑以下文件和差异结果: a1.txt a b My name is Ian a a b My name is John a My name is Ian a a My name is John a2.txt a b My name is Ian a a b My name is John a My name is Ian a a My name is John 运行diff--并排--suppress common line a1.txt a2.txt会产生:

考虑以下文件和差异结果:

a1.txt

a
b
My name is Ian
a
a
b
My name is John
a
My name is Ian
a
a
My name is John
a2.txt

a
b
My name is Ian
a
a
b
My name is John
a
My name is Ian
a
a
My name is John
运行
diff--并排--suppress common line a1.txt a2.txt
会产生:

                             >  a
My name is Ian               |  My name is John
My name is Ian                |  a
                              >  My name is John
它正确地表明
a
添加到
a2.txt
中,并且
我的名字是伊恩
更改为
我的名字是约翰

但是,如果我从两个文件中删除
b
,则生成的结果不同:

b1.txt

a
b
My name is Ian
a
a
b
My name is John
a
My name is Ian
a
a
My name is John
b2.txt

a
b
My name is Ian
a
a
b
My name is John
a
My name is Ian
a
a
My name is John
并行运行
diff--suppress common line b1.txt b2.txt
会产生:

                             >  a
My name is Ian               |  My name is John
My name is Ian                |  a
                              >  My name is John
这表明行
我的名字是Ian
更改为
a
,并且
我的名字是John
被添加到
b2.txt

尽管第二次比较的结果在技术上是有效的,但是
a1.txt
a2.txt
之间的差异与
b1.txt
b2.txt
之间的差异是相等的,那么为什么结果不相等呢


我能做些什么使第二次比较产生与第一次相同的结果吗?

您观察到的两个例子之间的差异是正常的;它只是与您对
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
然而,在第二个例子中,你有

# 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算法(或实现自己的算法),我不这么认为。

[…]为什么结果不相等?您的问题源于对diff算法的误解。@Jubobs由于您对diff算法的了解似乎比我们中的许多人都多,请在答案部分给我们一个详细的答案。。将有助于lot@Jubobs你能详细说明一下吗?或者你只是在说,期望差异解释等同的变化是不合理的。。。等价地?@IAN2TEDV“不合理”中有一个值判断,所以我不会说得太远:)只是算法计算两对文件之间的差异的方式不同于您预期的方式。@hazzelnuttie请查看我的答案以获得解释。谢谢您的解释谢谢:-)谢谢您的回答