我真的需要您的帮助来建议如何使用 diff 命令显示正确的比较测试。我有两个文件
文件A:
2 1
3 4166
4 1186
5 14318
6 2451
7 64
10 3
11 18
20 5
文件B:
3 3990
4 1144
5 14368
6 2439
7 64
10 3
11 18
20 5
以这种方式运行 diff 命令来显示并排比较,输出不是我所期望的:
diff -y -W 60 FileA FileB
输出是:
2 1 | 3 3992
3 4166 | 4 1144
4 1186 | 5 14372
5 14318 | 6 2439
6 2451 <
7 64 7 64
10 3 10 3
11 18 11 18
20 5 20 5
预期输出应该是:
2 1 <
3 4166 | 3 3992
4 1186 | 4 1144
5 14318 | 5 14372
6 2451 | 6 2439
7 64 7 64
10 3 10 3
11 18 11 18
20 5 20 5
我的意思是,FileB 中的第一行丢失了,但 diff 没有捕获它。你能帮我解决这个问题吗?
答案1
有几种方法可以比较这个
foo
bar
对此
baz
通过比较线路。你可以这么说吧
foo
仅在第一个文件中,bar
并且baz
是不同的行;- 或
foo
和baz
是不同的行,bar
仅在第一个文件中; - 或
foo
和bar
仅在第一个文件中,baz
仅在第二个文件中。
每个描述都是真实的。前两个稍微好一些,因为在格式diff -y
使用中它们各占两行,而第三个占三行。
在这种情况下,diff -y
可以很好地生成两行,而不是三行。但仍然有两种可能的描述可供选择。
您可能会喜欢第一个描述(其中bar
被替换baz
),因为此更改仅更改了一个字母;但diff
没有相似线的概念。两条线要么不同,要么不同。
在你的例子中,要比较 5 条线和 4 条不同的线,我可以假设任何5 行中的 5 行对于第一个文件是唯一的,其余 4 行相应地对应。你说第一行被删除了;diff
说第五个被删除了。两种方法都是有效的。
这是因为它diff
适用于线条,并且没有仅部分不同的线条的概念。
我试过了wdiff
,它可以用文字来实现。该工具能够将两个文件中的3
、4
和识别5
为相同的。6
但它是具有不同输出的不同工具。