Użycie diff na długim pliku jednowierszowym


25

Mam plik, który ma tylko jedną linię. Jego rozmiar wynosi około 20 000 bajtów.

Plik został zmodyfikowany i chciałem wiedzieć, gdzie.

Myślałem o użyciu diff, ale pokazuje mi pełną linię, ponieważ wyświetla linię, która ma różnicę - ale w tym przypadku jest to jedyna linia w pliku, która ma różnice.

Chciałem więc zobaczyć, jaka jest różnica.

Jakakolwiek rada?


3
Zróżnicowane słowo po słowie? manpages.ubuntu.com/manpages/lucid/man1/wdiff.1.html
VenkatH

2
Czy próbowałeś go potokiem do FMT (jeśli ar używać Linuksa oczywiście) można zrobić „fmt -w 50 long.txt | diff”
l1zard

Odpowiedzi:


13

Zakładając, że istnieje wiele białych znaków, tak jak w normalnym tekście, możesz podzielić plik na słowa i porównać go z normalnym narzędziem różnicowym, na przykład meld:

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

2
Wydaje się to dla mnie najprostszym rozwiązaniem. Sam problem diff jest trywialny, jednak większość narzędzi (nie tylko diff-tools) nie radzi sobie z długimi liniami, więc problem dotyczy raczej długich linii, a nie samego różnicowania.
p1100i

4

Znalazłbym różnicę, która robi różnice między wierszami. Używam xxdiff w systemie UNIX. Myślę, że WinMerge ma różnice wewnątrz linii w systemie Windows.

Inne odpowiedzi są również dobre: ​​wdiff lub dzielenie na fragmenty - granice fragmentu są łatwiejsze do zdefiniowania, jeśli dane są rozdzielane, powiedzmy potokiem lub przecinkiem.


1
FYI, xxdiff segfaults, jeśli linie są dłuższe niż 32768 znaków ...
ValarDohaeris

3

Jeśli jest to problem jednorazowy, utworzę kopie plików ze \nznakami wstawianymi co 50 znaków, a następnie różnicuję te kopie. (Wybrałem 50, ponieważ ułatwia to matematykę od zmiany numeru wiersza do przesunięcia bajtów w oryginalnych plikach, ale może dostosować to w górę / w dół w zależności od tego, co znalazłem.)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.