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
719016
fuente
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
fedorqui 'Así que deja de hacer daño'
fuente
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.

timmfin
fuente
29
diff -y --suppress-common-lines file1 file2
Rjazhenka
fuente
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.

srpatch
fuente
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.

Chris Seymour
fuente
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
7

Simplemente puede usar:

diff -y fileA.txt fileB.txt | colordiff

¡Muestra la salida dividida en dos columnas y coloreada! ( colordiff)

Jorge Fernando Matricali
fuente
1
Lo probé en OSX y no funciona aquí. Tal vez sea solo para Linux.
Nikola Petkanski
colordiff no está en osx.
terry franguiadakis
Puede instalar colordiff en OSX usando Homebrew brew install colordiff Consulte la fórmula de colordiff
Jorge Fernando Matricali
6

Utilice la -yopción:

diff -y file1 file2
rectummelancolique
fuente
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.

ymattw
fuente
5

Puede utilizar vimdiff.

Ejemplo:

vimdiff file1 file2
Eduardo Cuomo
fuente
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
Cubeta
fuente
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
ahmet
fuente