Linux diff 命令未显示正确的比较

Linux diff 命令未显示正确的比较

我真的需要您的帮助来建议如何使用 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

通过比较线路。你可以这么说吧

  1. foo仅在第一个文件中,bar并且baz是不同的行;
  2. foobaz是不同的行,bar仅在第一个文件中;
  3. foobar仅在第一个文件中,baz仅在第二个文件中。

每个描述都是真实的。前两个稍微好一些,因为在格式diff -y使用中它们各占两行,而第三个占三行。

在这种情况下,diff -y可以很好地生成两行,而不是三行。但仍然有两种可能的描述可供选择。

您可能会喜欢第一个描述(其中bar被替换baz),因为此更改仅更改了一个字母;但diff没有相似线的概念。两条线要么不同,要么不同。

在你的例子中,要比较 5 条线和 4 条不同的线,我可以假设任何5 行中的 5 行对于第一个文件是唯一的,其余 4 行相应地对应。你说第一行被删除了;diff说第五个被删除了。两种方法都是有效的。

这是因为它diff适用于线条,并且没有仅部分不同的线条的概念。

我试过了wdiff,它可以用文字来实现。该工具能够将两个文件中的34和识别5为相同的。6但它是具有不同输出的不同工具。

相关内容