Utilizzo di diff su un file lungo di una riga


25

Ho un file che ha solo una riga. La sua dimensione è di circa 20.000 byte.

Il file è stato modificato e volevo sapere dove.

Ho pensato di usare diff, ma mi mostra la linea completa, perché emette la linea che ha la differenza - ma in questo caso è l'unica riga nel file che ha differenze.

Quindi volevo vedere qual è la differenza.

Qualche consiglio?



2
hai provato a collegarlo a fmt (se stai usando Linux ovviamente) potresti fare "fmt -w 50 long.txt | diff"
l1zard

Risposte:


13

Supponendo che ci siano molti spazi bianchi, come nel testo normale, è possibile dividere il file per parole e confrontarlo con un normale strumento diff, ad esempio, si fondono:

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

2
Sembra essere la soluzione più semplice per me. Il problema diff in sé è banale, tuttavia la maggior parte degli strumenti (non solo diff-tools) non è in grado di gestire le linee lunghe, quindi il problema riguarda piuttosto le linee lunghe, non il diff stesso.
p1100i,

4

Troverei un diff che fa diff all'interno della linea. Uso xxdiff su UNIX. Penso che WinMerge faccia diff diff su Windows.

Anche le altre risposte sono buone: wdiff o suddivisione in blocchi: i limiti del blocco sono più facili da definire se i dati sono delimitati da una pipe o una virgola.


1
Cordiali saluti, xxdiff segfaults se le linee sono più lunghe di 32768 caratteri ...
ValarDohaeris,

3

Se questo è un problema una tantum, creerei copie dei file con \ncaratteri inseriti ogni 50 caratteri, quindi differei quelle copie. (Ho scelto 50 perché semplifica il passaggio da un numero di riga diverso a un offset di byte nei file originali, ma potrebbe regolarlo su / giù in base a ciò che ho trovato.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.