是否有精简的并排diff格式?


40

我有两个带有数千行的日志文件。预处理后,仅某些行不同。这些剩余的行要么是实际的差异,要么是混乱的行组。

统一的差异使我可以看到详细的差异,但是很难与眼球进行手动比较。并排差异对于比较似乎更有用,但它也增加了数千行未更改的行。有没有办法利用两个世界的优势?

注意,这些日志文件是通过xscope监视Xorg协议数据的程序生成的。我正在寻找可用于类似于上述情况的通用工具,而不是例如专用的Web服务器访问日志分析工具。


可从http://lekensteyn.nl/files/qemu-sdl-debug/log13log14)获得两个示例日志文件。可以在xscope-filter文件中找到预处理器命令,该命令会删除时间戳和其他次要细节。


2
diff--suppress-common-lines选择吗?pastebin.com/KZrVCNFR
manatwork 2013年

1
@manatwork不错,确实如此。有什么方法可以添加更多上下文(例如行号)?
Lekensteyn

5
然后,也许vimdiff(从vim软件包中)可以更好地满足您的需求:并行显示,彩色显示,折叠普通线。可以使用打开行号:set number
manatwork 2013年

我认为您应该把vimdiff当作答案:)
Kotte

1
首选CLI工具,但如果它们很小,也可以使用GUI工具。我已经尝试过kdiff3,但是它仍然产生了很多细节。理想情况下,我不会看到所有不必要的细节。我将附加两个数据集。
Lekensteyn

Answers:


37

我最常使用的2个差异工具将是meldsdiff

融合

Meld是一个GUI,但是在显示文件之间的差异方面做得很好。它更适合于软件开发,其功能包括将更改从一侧移动到另一侧以合并更改的功能,但可以用作直接的并排差异工具。

    融合

    ss融合代码突出显示

斯迪夫

我已经使用这个工具很多年了。我通常使用以下开关运行它:

$ sdiff -bBWs file1 file2
  • -b 忽略空白量的变化。
  • -W 忽略所有空白。
  • -B 忽略所有行均为空白的更改。
  • -s 不要输出公共线。

通常,对于日志文件,您需要使列的宽度变宽,可以-w <num>用来使屏幕变宽。

我经常使用的其他工具

差异

Diffc是一个Python脚本,用于为统一的diff输出着色。

$ diffc [OPTION] FILE1 FILE2

             diffss

维姆迪夫

Vimdiff可能甚至好于Meld,并且可以从终端运行。我总是忘记使用它,尽管对我来说,这是一个很好的指标,表明我发现该工具每天都难以使用。但是YMMV。

                                    维姆迪夫


1
不幸的是,Meld的一个重要功能是无法突出显示在屏幕快照中,它是源代码文件的语法高亮显示
manatwork 2013年

是。我一直都在使用vimdiff,从那以后我就转向使用Meld,我发现它更易于使用,而且与vimdiff相比,更容易看出其含义。
slm

@manatwork-将您的链接添加到答案,感谢您的反馈!
slm

1
对于源代码而言看起来不错,但对于比较日志文件而言却不是很多。我经常使用colordiffcolordiff.org源文件。据我了解,sdiff这类似于diff -y输出没有差异,但选项略有不同。+1用于显示一些简单的差异比较好选择。
Lekensteyn

我从未使用过colordiff,我将不得不检查一下。您是正确的diff -y。将切换添加到diff某处似乎已经发生,或者我从未注意到。此外,这是指向gnu diff工具资源页面的链接。使用这套工具的好东西。
slm

20

目前,我在grep过滤不同行时使用并排diff:

diff -y -W250 log.txt log2.txt | expand | \
    grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
  • Option -W250使输出更宽,这样我可以看到更多数据。
  • expand 将制表符转换为空格所必需
  • -C3 向grep输出添加3行上下文。
  • ^.{123} 与并排的diff标记之前的数据匹配一半。
  • colordiff 使输出更美观
  • less -rS允许解释ANSI颜色(-r)并防止换行(-S)。

这是一个技巧,欢迎选择。


1
太好了
Pat Myron

好主意。不幸的是grep正则表达式太慢了。还diff具有一个-t选项卡来扩展选项卡。
Timmmm


0

linux“ sdiff”命令显示并排差异,默认情况下包括所有行,但是您可以使用各种选项来仅显示差异:

sdiff -tWBs -w $COLUMNS config.xml config.xml.original

哪里

-t:将制表符转换为空格

-W:忽略空白差异

-B:忽略空白行

-s:忽略相同的行

-w $ COLUMNS:使用整个屏幕宽度

所显示的行将被|,<或>隔开-请参阅文档,或尝试一下。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.