是否有压缩的并排差异格式?

Lek*_*eyn 52 diff

我有两个包含数千行的日志文件。预处理后,只有一些行不同。这些剩余的线条要么是真正的差异,要么是经过混洗的线条组。

统一差异让我可以看到详细的差异,但它使人工与眼球比较变得困难。并排差异对于比较似乎更有用,但它也增加了数千条未更改的行。有没有办法兼顾两全其美?

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


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

slm*_*slm 45

我最常使用的 2 个 diff 工具是meldsdiff

融合

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

    融合的SS

    融合代码突出显示的 ss

差异

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

$ sdiff -bBWs file1 file2
Run Code Online (Sandbox Code Playgroud)
  • -b 忽略空白量的变化。
  • -W 忽略所有空白。
  • -B 忽略所有行都是空白的更改。
  • -s 不要输出公共线。

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

我断断续续使用的其他工具

差异化

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

$ diffc [OPTION] FILE1 FILE2
Run Code Online (Sandbox Code Playgroud)

             diffc的ss

vimdiff

Vimdiff可能和meld一样好,而且它可以从终端运行。我总是忘记使用它,但对我来说,这是一个很好的指标,表明我发现该工具每天使用起来有点困难。但是YMMV。

                                    vimdiff 的 ss


Lek*_*eyn 21

目前我正在使用并排 diff 和 grep 过滤不同的行:

diff -y -W250 log.txt log2.txt | expand | \
    grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
Run Code Online (Sandbox Code Playgroud)
  • 选项-W250使输出更宽,以便我可以看到更多数据。
  • expand 需要将制表符转换为空格
  • -C3 向 grep 输出添加 3 行上下文。
  • ^.{123} 匹配并排差异标记之前的一半数据。
  • colordiff 使输出更易于遵循
  • less -rS允许解释 ANSI 颜色 ( -r) 并防止换行 ( -S)。

这是一个黑客,欢迎替代。


小智 19

还没有人提到icdiff吗?这很棒!图片不言自明: 爱奇艺

  • 这是一个非常简洁的工具,也可以在 aur 上找到。 (3认同)

小智 5

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

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

在哪里

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

-W:忽略空白差异

-B:忽略空行

-s:忽略相同的行

-w $COLUMNS:使用屏幕的全宽

显示的行将被 |、< 或 > 分隔——请参阅文档,或者只是尝试一下。


小智 5

diff -y --suppress-common-lines "$file1" "$file2"
Run Code Online (Sandbox Code Playgroud)

将是第一件事。很简单,diff是Unix常用的工具。

-y
Run Code Online (Sandbox Code Playgroud)

使其并排显示

--suppress-common-lines 
Run Code Online (Sandbox Code Playgroud)

过滤掉相同的行