web-dev-qa-db-ja.com

圧縮されたside-by-side diff形式はありますか?

数千行のログファイルが2つあります。前処理後、一部の行のみが異なります。これらの残りの行は、実際の違いか、行のグループをシャッフルしたものです。

統一された差分を使用すると、詳細な違いを確認できますが、眼球との手動での比較が困難になります。サイドバイサイドの比較は比較に役立つようですが、何千もの変更されていない行が追加されます。両方の世界の利点を得る方法はありますか?

これらのログファイルは、Xorgプロトコルデータを監視するプログラムであるxscopeによって生成されることに注意してください。たとえば、専用のWebサーバーアクセスログ分析ツールではなく、上記のような状況に適用できる汎用ツールを探しています。


http://lekensteyn.nl/files/qemu-sdl-debug/log13およびlog14)に2つのサンプルログファイルがあります。プリプロセッサコマンドはxscope-filterファイルにあり、タイムスタンプやその他の細部を削除します。

44
Lekensteyn

私が最もよく使用する2つのdiffツールは meld および sdiff です。

溶ける

MeldはGUIですが、ファイル間の差分を表示するのに優れています。変更を一方の側から他方の側に移動して変更をマージする機能などのソフトウェア開発向けに設計されていますが、単純な並べて比較ツールとして使用できます。

ss of meld

ss of meld code highlighting

sdiff

このツールを何年も使用しています。私は通常、次のスイッチで実行します。

$ sdiff -bBWs file1 file2
  • -b空白の量の変化を無視します。
  • -Wすべての空白を無視します。
  • -B行がすべて空白の変更を無視します。
  • -s共通​​ラインを出力しません。

多くの場合、ログファイルでは、列の幅を広くする必要があります。-w <num>画面を広くします。

オフとオンで使用する他のツール

違い

Diffc はpython=統一されたdiff出力を色付けするスクリプトです。

$ diffc [OPTION] FILE1 FILE2

ss of diffc

vimdiff

Vimdiff はmeldと同等かそれよりも優れており、ターミナルから実行できます。私は常にそれを使用することを忘れていますが、それは、私にとって、ツールが日常的に使用するのが少し難しいと感じる良い指標であることを示しています。しかし、YMMV。

ss of vimdiff

38
slm

現在、異なる行をフィルタリングするgrepでside-by-side diffを使用しています。

diff -y -W250 log.txt log2.txt | expand | \
    grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
  • オプション-W250は、出力を広くして、より多くのデータを表示できるようにします。
  • expandはタブをスペースに変換するために必要です
  • -C3は、grep出力に3行のコンテキストを追加します。
  • ^.{123}は、横並びのdiffマーカーの前のデータの半分に一致します。
  • colordiffは、出力をより綺麗にします
  • less -rS ANSIカラーを解釈できるようにします(-r)そして折り返された行を防ぎます(-S)。

これはハックです。代替案は歓迎されます。

20
Lekensteyn

誰も言及していません icdiff まだですか?それは素晴らしい! Picはそれ自体を語ります: icdiff

14

Linuxの「sdiff」コマンドは、デフォルトですべての行を含めて、横並びの違いを表示しますが、さまざまなオプションを使用して違いのみを表示することができます。

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

どこ

-t:タブをスペースに変換します

-W:空白の違いを無視

-B:空白行を無視します

-s:同じ行を無視します

-w $ COLUMNS:画面の全幅を使用

表示される行は、|、<、または>で分割されます。ドキュメントを参照するか、試してください。

3
Moshe Yudkowsky