resultados de unix diff de lado a lado?


106

¿Cómo puedo trazar los resultados de un comando Unix diff de lado a lado en lugar de una diferencia tras otra? Vea a continuación un ejemplo:

    diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf
< asdfsad
< fsaf
< fdsadf
---
> asdfsafdsf
> saf
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa
< fd
---
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> safa

Me gustaría tener algo como:

diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf       > asdfsafdsf
< asdfsad        > saf       
< fsaf
< fdsadf
---
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa               > sadf
< fd              > sadf
---               > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > safa

vimdiff también puede ayudar. Buena suerte.
shellter

Respuestas:


168

Desde man diff, puede utilizar -ypara hacer uno al lado del otro.

-y, --side-by-side
       output in two columns

Por lo tanto, di:

diff -y /tmp/test1  /tmp/test2

Prueba

$ cat a                $ cat b
hello                  hello
my name                my name
is me                  is you

Vamos a compararlos:

$ diff -y a b
hello                                                           hello
my name                                                         my name
is me                                                         | is you

39
Tenga en cuenta que difftiene un ancho de salida máximo codificado de forma rígida (130 columnas). Agregue la opción diff --width=$COLUMNSpara establecer esto en el ancho de su terminal.
ntc2

6
También para diferencias grandes, simplemente diríjase a menos como esta para una buena diferencia de desplazamiento / búsqueda:diff -y /tmp/test1 /tmp/test2 | less
willbradley

echa un vistazo a colordiff
Vladislavs Dovgalecs

5
mejordiff --width=$COLUMNS --suppress-common-lines --side-by-side a b
rubo77

@ rubo77 Dependiendo de cómo haya configurado la expansión de pestañas, es posible que también desee expandir las pestañas a espacios para que la salida se alinee correctamente en las columnas:diff --expand-tabs --width=$COLUMNS --suppress-common-lines --side-by-side a b
EdwardTeach

40

Desde la página de inicio de icdiff :

ingrese la descripción de la imagen aquí

Su terminal puede mostrar el color, pero la mayoría de las herramientas de diferencias no lo utilizan bien. Al resaltar los cambios, icdiff puede mostrarle las diferencias entre archivos similares sin interferir. Esto es especialmente útil para identificar y comprender pequeños cambios dentro de las líneas existentes.

En lugar de intentar ser un reemplazo de diff para todas las circunstancias, el objetivo de icdiff es ser una herramienta a la que pueda acceder para obtener una mejor imagen de lo que cambió cuando no es inmediatamente obvio por diff.

En mi humilde opinión, su salida es mucho más legible que diff -y.


29
diff -y --suppress-common-lines file1 file2

3
Esta debería ser la respuesta aceptada porque solo -ymuestra líneas comunes que no son lo mismo que diffla pregunta original. +1.
hélice

mejordiff -W $COLUMNS --suppress-common-lines -y file1 file2
rubo77

13

Puedes usar:

sdiff  file1 file2

o

diff -y file1 file2

o

vimdiff file1 file2

para visualización lado a lado.


2
Me preguntaba cuál es la diferencia entre diff -yy sdiff? Su salida me parece idéntica.
Hux

11

Debería tener sdiffuna combinación de diferencias de archivos en paralelo. Lea man sdiffla historia completa.


2
En mi sistema (GNU / Linx) sdiffparece hacer lo mismo que diff -yy la sdiffdocumentación de información dice que está obsoleto: "'sdiff' sin '--output' ('-o') produce una diferencia de lado a lado. Este uso es obsoleto; use la opción '--side-by-side' ('-y') de 'diff' en su lugar. "
ntc2



6

Pruebe cdiff : vea diferencias incrementales en color en el espacio de trabajo o desde stdin con soporte de localizador automático y en paralelo.



4

Si sus archivos tienen un uso inconsistente de espacios y pestañas, puede resultarle útil incluir el -targumento para expandir las pestañas:

diff -ty file1 file2

1

Comando diff mejorado con color, lado a lado y alias

Digamos que el contenido del archivo es como:

cat /tmp/test1.txt
1
2
3
4
5
8
9

y

cat /tmp/test2.txt
1
1.5
2
4
5
6
7

Ahora comparando lado a lado

diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7

Puede definir un alias para usar

alias diff='diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always'

Entonces nuevo resultado diferencial:

diff /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7
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.