
Tengo un archivo que tiene solo una línea. Su tamaño es de unos 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 del archivo que tiene diferencias.
Entonces quería ver cuál es la diferencia.
¿Algún consejo?
Respuesta1
Suponiendo que hay muchos espacios en blanco, como en el texto normal, puede dividir el archivo por palabras y compararlo con una herramienta de comparación 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
Respuesta2
Encontraría una diferencia que haga diferencias dentro de línea. yo sueloxdiffen UNIX. CreoWinMergehace diferencias intralínea en Windows.
Las otras respuestas también son buenas: wdiff, o dividir en fragmentos: los límites de los fragmentos son más fáciles de definir si los datos están delimitados, por ejemplo, por una barra vertical o una coma.
Respuesta3
Si se trata de un problema puntual, crearía copias de los archivos con \n
caracteres insertados cada 50 caracteres y luego diferenciaría esas copias. (Elegí 50 porque facilita las matemáticas desde un número de línea diferente hasta un desplazamiento de bytes en los archivos originales, pero podría ajustarlo hacia arriba o hacia abajo según lo que encontré).
Respuesta4
Encontré git diff
que la --word-diff=porcelain
opción es útil para tal tarea, por ejemplo, dados 2 archivos con líneas largas que solo difieren en 1 carácter, la salida se puede canalizar grep
para filtrar las líneas modificadas y los cambios, y luego grep
nuevamente para mostrar solo los últimos 80 caracteres de cada línea:
echo {1..4000} A {4001..8000} > a.tmp
echo {1..4000} B {4001..8000} > b.tmp
> git diff -U0 --word-diff=porcelain a.tmp b.tmp | grep -A3 '@@' | egrep -o '.{1,80}$'
@@ -1 +1 @@
3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000
-A
+B