数千行のログファイルが2つあります。前処理後、一部の行のみが異なります。これらの残りの行は、実際の違いか、行のグループをシャッフルしたものです。
統一された差分を使用すると、詳細な違いを確認できますが、眼球との手動での比較が困難になります。サイドバイサイドの比較は比較に役立つようですが、何千もの変更されていない行が追加されます。両方の世界の利点を得る方法はありますか?
これらのログファイルは、Xorgプロトコルデータを監視するプログラムであるxscope
によって生成されることに注意してください。たとえば、専用のWebサーバーアクセスログ分析ツールではなく、上記のような状況に適用できる汎用ツールを探しています。
http://lekensteyn.nl/files/qemu-sdl-debug/ (log13
およびlog14
)に2つのサンプルログファイルがあります。プリプロセッサコマンドはxscope-filter
ファイルにあり、タイムスタンプやその他の細部を削除します。
私が最もよく使用する2つのdiffツールは meld および sdiff です。
MeldはGUIですが、ファイル間の差分を表示するのに優れています。変更を一方の側から他方の側に移動して変更をマージする機能などのソフトウェア開発向けに設計されていますが、単純な並べて比較ツールとして使用できます。
このツールを何年も使用しています。私は通常、次のスイッチで実行します。
$ sdiff -bBWs file1 file2
-b
空白の量の変化を無視します。-W
すべての空白を無視します。-B
行がすべて空白の変更を無視します。-s
共通ラインを出力しません。多くの場合、ログファイルでは、列の幅を広くする必要があります。-w <num>
画面を広くします。
Diffc はpython=統一されたdiff出力を色付けするスクリプトです。
$ diffc [OPTION] FILE1 FILE2
Vimdiff はmeldと同等かそれよりも優れており、ターミナルから実行できます。私は常にそれを使用することを忘れていますが、それは、私にとって、ツールが日常的に使用するのが少し難しいと感じる良い指標であることを示しています。しかし、YMMV。
現在、異なる行をフィルタリングする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
)。これはハックです。代替案は歓迎されます。
誰も言及していません icdiff まだですか?それは素晴らしい! Picはそれ自体を語ります:
Linuxの「sdiff」コマンドは、デフォルトですべての行を含めて、横並びの違いを表示しますが、さまざまなオプションを使用して違いのみを表示することができます。
sdiff -tWBs -w $COLUMNS config.xml config.xml.original
どこ
-t:タブをスペースに変換します
-W:空白の違いを無視
-B:空白行を無視します
-s:同じ行を無視します
-w $ COLUMNS:画面の全幅を使用
表示される行は、|、<、または>で分割されます。ドキュメントを参照するか、試してください。