大文件的并排差异

大文件的并排差异

我有两个 ~1 GB 的文件,我想对其进行并排比较。我尝试过的解决方案:

  • diff- 工作速度很快,但不能并排输出。
  • diff -ysdiff- 这会并排输出,但它输出全部的文件 - 不仅仅是更改,因此无法找到它们。
  • icdiff- 太慢了(它是用 Python 编写的,所以这并不奇怪)。
  • ydiff- 没有实际尝试过,但它也是用 Python 编写的,所以我认为它也会很慢。
  • KDiff3 - 崩溃了。
  • Xcode FileMerge - 太慢(导致几分钟无响应)。
  • 超越比较 - 最大 500MB 限制。
  • Meld - 取得了一些进展,但速度太慢而无用。
  • vimdiff- 成功加载文件并实际显示并排差异,但配色方案使其不可读,并且您期望从正常程序中获得的正常功能不起作用,例如按向上滚动。

答案1

到目前为止我拥有的最好的是:

diff -y --suppress-common-lines --speed-large-files file1 file2

用于--width=200控制宽度。

然而不幸的是这不会向您显示任何上下文行

我发现另一种解决方案使用grep这看起来不错,但它使用正则表达式并且速度太慢。

答案2

vimdiff在“MINGW64”[mintty 2.0.3(x86_64-pc-msys © 2015 by Andy Koppe) 终端中对我来说非常有用,该终端与我的 Vagrant 安装如下VaryingVagrantVagrants 指令.]

Ctrl+f向前导航; 向后/向上Ctrl+b导航 (如果您按如下方式比较了两个文件,则关闭第二个文件。):q-Enter:q-Enter

![viminfo 输出示例]2

箭头键的功能与鼠标滚轮一样;只需耐心等待它完成加载...您可以在“MINGW64”窗口选项以及.minttyrc文件中控制配色方案(请参阅此处了解更多信息):

![MINGW64/mintty 选项]4 我将光标设置为橙色并闪烁,这样更容易找到。

2

答案3

如果您需要上下文,您可以通过带有之前(-B)和之后(-A)上下文的egrep管道传输sdiff(或diff -y)的(未抑制的)输出:

sdiff -H -t file1 file2 | egrep -B1 -A1 '^.{64}[^ ]' 

-t 和 .{64} 用于到达默认 130 个字符宽度的中间点(在输出中扩展制表符,这样它们就不会弄乱计数)。您可以指定更短的宽度,但必须相应地调整偏移量:

sdiff -H -w 80 -t file1 file2 | egrep -B1 -A1 '^.{39}[^ ]' 

相关内容