我有两个包含数千行的日志文件。预处理后,只有一些行不同。这些剩余的行要么是真正的差异,要么是打乱的行组。
统一的差异让我可以看到详细的差异,但它使肉眼手动比较变得困难。并排差异似乎对于比较更有用,但它也增加了数千条未更改的行。有没有办法获得两全其美的优势?
请注意,这些日志文件是由xscope
监视 Xorg 协议数据的程序生成的。我正在寻找可以应用于与上述类似情况的通用工具,而不是专门的网络服务器访问日志分析工具。
两个示例日志文件位于http://lekensteyn.nl/files/qemu-sdl-debug/(log13
和log14
)。可以在文件中找到预处理器命令xscope-filter
,该命令删除时间戳和其他次要细节。
答案1
融合
Meld 是一个 GUI,但在显示文件之间的差异方面做得很好。它更适合软件开发,具有将更改从一侧移动到另一侧以合并更改的功能,但也可以用作直接并排比较工具。
差异
我已经使用这个工具很多年了。我通常使用以下开关运行它:
$ sdiff -bBWs file1 file2
-b
忽略空白量的变化。-W
忽略所有空白。-B
忽略行全为空白的更改。-s
不输出公共线。
通常,对于日志文件,您需要使列的宽度更宽,您可以使用它-w <num>
来使屏幕更宽。
我断断续续使用的其他工具
差异化
差速器是一个Python脚本,它对统一的差异输出进行着色。
$ diffc [OPTION] FILE1 FILE2
维姆迪夫
维姆迪夫可能与 meld 一样好,甚至更好,并且可以从终端运行。我总是忘记使用它,但对我来说,这是一个很好的指标,表明我发现该工具日常使用有点困难。但是YMMV。
答案2
目前我正在使用并排 diff 和 grep 过滤不同的行:
diff -y -W250 log.txt log2.txt | expand | \
grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
- 选项
-W250
使输出更宽,以便我可以看到更多数据。 expand
需要将制表符转换为空格-C3
向 grep 输出添加 3 行上下文。^.{123}
匹配并排差异标记之前的一半数据。colordiff
使输出更容易理解less -rS
允许解释 ANSI 颜色 (-r
) 并防止换行 (-S
)。
这是一个黑客,欢迎替代方案。
答案3
没有人提到ICDIFF然而?这很棒!图片不言而喻:
答案4
linux“sdiff”命令显示并排差异,默认情况下包括所有行,但您可以使用各种选项仅显示差异:
sdiff -tWBs -w $COLUMNS config.xml config.xml.original
在哪里
-t:将制表符转换为空格
-W:忽略空白差异
-B:忽略空行
-s:忽略相同的行
-w $COLUMNS:使用屏幕的全宽
显示的行将被 |、< 或 > 分隔——请参阅文档,或者只是尝试一下。