我有两个 ~1 GB 的文件,我想对其进行并排比较。我尝试过的解决方案:
diff
- 工作速度很快,但不能并排输出。diff -y
或sdiff
- 这会并排输出,但它输出全部的文件 - 不仅仅是更改,因此无法找到它们。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
]2
箭头键的功能与鼠标滚轮一样;只需耐心等待它完成加载...您可以在“MINGW64”窗口选项以及.minttyrc
文件中控制配色方案(请参阅此处了解更多信息):
]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}[^ ]'