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?

jperelli
źródło
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
unix.stackexchange.com/questions/11128/diff-within-a-line
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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
Philipp Claßen
źródło
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.

Rich Homolka
źródło
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.)

Nicole Hamilton
źródło