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


40

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

統合された差分により詳細な違いを確認できますが、眼球との手動比較が困難になります。横並びの比較は比較に便利なようですが、変更されていない数千行も追加されます。両方の世界を活用する方法はありますか?

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


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


2
あなたはないdiff持っている--suppress-common-linesオプションは?pastebin.com/KZrVCNFR
manatwork

1
@manatworkいいですね。コンテキスト(行番号など)を追加する方法はありますか?
Lekensteyn

5
それvimdiffから(vimパッケージから)あなたのニーズにより良く応えることができるでしょう:並列表示、色付け、共通線の折り返し。行番号はでオンにできます:set number
マナトワーク

私はあなたが答えとしてvimdiffを置くべきだと思う:)
Kotte

1
CLIツールが推奨されますが、GUIツールも十分に小さい場合は許可されます。私はkdiff3を試してみましたが、まだかなり詳細に作成されています。理想的には、すべての不必要な詳細は表示されません。2つのデータセットを添付します。
Lekensteyn

回答:


37

私が最も使用する2つのdiffツールは、meldsdiffです。

溶ける

MeldはGUIですが、ファイル間の差分を表示するのに非常に役立ちます。変更を一方の側から他方の側に移動して変更をマージする機能などの機能を備えたソフトウェア開発により適していますが、単なる直線的な差分ツールとして使用できます。

    メルスのSS

    ssのメルドコードの強調表示

sdiff

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

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

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

私が使用する他のツール

diffc

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

$ diffc [OPTION] FILE1 FILE2

             diffsのss

vimdiff

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

                                    ss of vimdiff


1
残念ながらスクリーンショットには表示されないMeldの優れた機能の1つは、ソースコードファイルの構文強調表示です。
マナトワーク

はい。私はいつもvimdiffを使用していましたが、その後meldを使用するようになりました。使いやすく、vimdiffと比べてわかりやすくなっています。
slm

@manatwork-回答へのリンクを追加しました、フィードバックをありがとう!
slm

1
ソースコードには最適ですが、ログファイルの比較にはあまり適していません。ソースファイルにcolordiff.orgcolordiffからよく使用します。私の理解では、出力に違いはありませんが、オプションがわずかに異なります。プレーンdiffの優れた代替案を示すために+1。sdiffdiff -y
-Lekensteyn

私は今までcolordiffを使用したことがないので、チェックアウトする必要があります。あなたは正しいですdiff -y。そのスイッチの追加は、diffある時点で起こったように思われるか、私はそれを気づかなかった。さらに、gnu diff toolsリソースページへのリンクもあります。この一連のツールを使用するための良いもの。
slm

20

現在、異なる行をフィルタリングする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} side-by-side diffマーカーの前のデータの半分に一致します。
  • colordiff 出力をよりきれいにする
  • less -rSANSIカラーを解釈できるようにし(-r)、折り返された行を防ぎます(-S)。

これはハックです。代替手段を歓迎します。


1
これは素晴らしい。
パットマイロン

良いアイデア。残念ながら、grep正規表現は遅すぎます。タブを展開diffする-tオプションもあります。
Timmmm


0

linuxの「sdiff」コマンドは、デフォルトではすべての行を含めて、左右に違いを表示しますが、さまざまなオプションを使用して違いのみを表示できます。

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

どこで

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

-W:空白の違いを無視

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.