長い1行のファイルでdiffを使用する


25

1行しかないファイルがあります。そのサイズは約20,000バイトです。

ファイルは変更されており、どこで知りたいと思いました。

diffを使用することを考えましたが、違いのある行を出力するため、完全な行が表示されます。ただし、この場合、ファイル内で唯一の違いがある行です。

だから私は違いが何であるかを見たかった。

何かアドバイス?


3
単語ごとに比較しますか?manpages.ubuntu.com/manpages/lucid/man1/wdiff.1.html
VenkatH

2
(もちろんLinuxを使用している場合)fmtにパイピングしてみましたか?「fmt -w 50 long.txt | diff」
-l1zard

回答:


13

通常のテキストのように多くの空白が存在すると仮定すると、ファイルを単語ごとに分割し、meldなどの通常のdiffツールと比較できます。

tr -s ' ' '\n' < file1.txt > file1.txt.split
tr -s ' ' '\n' < file2.txt > file2.txt.split
meld file1.txt.split file2.txt.split

2
私にとって最も簡単なソリューションのようです。diffの問題自体は些細な問題ですが、ほとんどのツール(diff-toolsだけでなく)は長い行を管理できないため、問題はdiff自体ではなく長い行を処理することです。
p1100i

4

行内差分を行う差分を見つけます。UNIX ではxxdiffを使用しています。WinMergeはWindowsで行内比較を行うと思います。

他の答えも同様に良いです:wdiff、またはチャンクに分割-チャンク境界は、データがパイプまたはコンマなどで区切られているかどうかを簡単に定義できます。


1
FYI、xxdiff セグメンテーション違反行が長く32768の文字...よりある場合
ValarDohaeris

3

これが1回限りの問題である場合、\n50文字ごとに文字が挿入されたファイルのコピーを作成し、それらのコピーを比較します。(50を選択したのは、元のファイルの行番号の違いからバイトオフセットへの計算が簡単になるためですが、見つけたものに基づいて上下を調整する可能性があるためです。)

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