![Diff 的行为非常奇怪,当整个块中的短位被更改、删除或添加时,会将长块报告为已删除](https://linux22.com/image/137500/Diff%20%E7%9A%84%E8%A1%8C%E4%B8%BA%E9%9D%9E%E5%B8%B8%E5%A5%87%E6%80%AA%EF%BC%8C%E5%BD%93%E6%95%B4%E4%B8%AA%E5%9D%97%E4%B8%AD%E7%9A%84%E7%9F%AD%E4%BD%8D%E8%A2%AB%E6%9B%B4%E6%94%B9%E3%80%81%E5%88%A0%E9%99%A4%E6%88%96%E6%B7%BB%E5%8A%A0%E6%97%B6%EF%BC%8C%E4%BC%9A%E5%B0%86%E9%95%BF%E5%9D%97%E6%8A%A5%E5%91%8A%E4%B8%BA%E5%B7%B2%E5%88%A0%E9%99%A4.png)
我有两个文件,都是代码的输出,我通过这些代码cut
仅查看每行的前 26 个字符。这两个文件都是代码测量的参数列表,例如“总横截面”或“中子寿命”,以及代码使用的选项(如“MPI_TASKS”或“COMPILE_DATE”),因此 file1 如下所示:
param1
param2
...
param2000
File2看起来基本相同,但是删除或更改了很多参数,并且添加了一些不同的参数。
没有报告这些更改/添加/删除发生的位置,而是diff
告诉我第 12 行到第 1750 行file1
已被删除,然后发现其余文件有大约 300 行差异。即使在这些差异中,它也只报告了其中大约 50 个的变化,其余的则报告为添加/删除。
我真的很困惑,不知道为什么diff
会这样。我尝试过使用一些选项,例如-aBCHw
.
我可以使用更好的实用程序吗?该cut
实用程序是否会造成问题?
答案1
默认情况下,diff
假设一些语境围绕差异的每个部分,称为块。如果你减少上下文(使用-C
选项),您可以减少块大小并使其不太可能将大(重叠)块报告为大差异。