Usando diff en un archivo largo de una línea


25

Tengo un archivo que solo tiene una línea. Su tamaño es de aproximadamente 20,000 bytes.

El archivo ha sido modificado, y quería saber dónde.

Pensé en usar diff, pero me muestra la línea completa, porque genera la línea que tiene la diferencia, pero en este caso es la única línea en el archivo que tiene diferencias.

Así que quería ver cuál es la diferencia.

¿Algún consejo?


3
¿Diferencia palabra por palabra? manpages.ubuntu.com/manpages/lucid/man1/wdiff.1.html
VenkatH

2
¿ha intentado conectarlo a fmt (si está usando linux, por supuesto) podría hacer "fmt -w 50 long.txt | diff"
l1zard

Respuestas:


13

Suponiendo que hay muchos espacios en blanco, como en el texto normal, puede dividir el archivo por palabras y compararlo con una herramienta de diferencias normal, por ejemplo, fusionar:

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

2
Parece ser la solución más sencilla para mí. El problema de diferencias en sí mismo es trivial, sin embargo, la mayoría de las herramientas (no solo las herramientas de diferencias) no pueden manejar líneas largas, por lo que el problema es tratar con líneas largas, no la diferencia en sí.
p1100i

4

Encontraría una diferencia que hace diferencias dentro de la línea. Yo uso xxdiff en UNIX. Creo que WinMerge hace diferencia entre líneas en Windows.

Las otras respuestas también son buenas: wdiff, o dividirse en fragmentos: los límites de los fragmentos son más fáciles de definir si los datos están delimitados por una tubería o una coma.


1
FYI, xxdiff segfaults si las líneas son más largas que 32768 caracteres ...
ValarDohaeris

3

Si este es un problema de una sola vez, crearía copias de los archivos con \ncaracteres insertados cada 50 caracteres, luego diferiría esas copias. (Elegí 50 porque hace que las matemáticas sean fáciles de pasar de un número de línea diferente a un desplazamiento de bytes en los archivos originales, pero podría ajustarlo hacia arriba / abajo según lo que encontré).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.