Búsqueda de sitios web

Cómo comparar tres archivos en Linux usando la herramienta diff3


En uno de nuestros tutoriales anteriores, analizamos una utilidad de línea de comandos de Linux, denominada diff, que le permite comparar dos archivos línea por línea. Pero ¿qué pasa si el requisito es comparar no dos, sino tres archivos? Sí, también existe una utilidad de línea de comandos de Linux para esto, y se llama apropiadamente diff3.

Si ha estado buscando una herramienta de este tipo, no busque más. En este tutorial, explicaremos el uso de diff3 a través de ejemplos fáciles de entender.

Instalar diferencia3

La herramienta diff3 probablemente se instalará de forma predeterminada en su sistema (al menos en Ubuntu). Pero si ese no es el caso, no te preocupes, ya que puedes hacerlo fácilmente instalando el paquete GNU Diffutils. Para obtener instrucciones sobre cómo descargar e instalar el paquete en su sistema, diríjase aquí.

Uso de Diff3

Como la utilidad diff3 compara tres archivos, para nuestros ejemplos de uso, tendremos que tomar tres archivos que pasaremos como entrada a la herramienta.

Aquí está el archivo1:

This is line1 with some change
This is line2
This is line3

Aquí está el archivo2:

This is line1
This is line2
This is line3

Y aquí está el archivo3:

This is line1
This is line2
This is line3

Claramente, si vemos el contenido de estos tres archivos, el único cambio está en la primera línea del primer archivo. Ahora veamos cómo diff3 informa este cambio.

Así es como podemos usar diff3 en este caso:

diff3 file1 file2 file3

Y aquí está el resultado que produce:

====1
1:1c
 This is line1 with some change
2:1c
3:1c
 This is line1

Puede comprender el resultado de la siguiente manera:

  • La primera línea que comienza con cuatro signos '=" y termina con el número '1' dice que el cambio está en el primer archivo.
  • En la siguiente línea, el primer '1' significa archivo1; el '1c' después de dos puntos 'significa que la primera línea contiene'. La línea real se muestra en la siguiente línea del resultado.
  • De manera similar, 2:1c y 3:1c significan "la primera línea de archivo2 y archivo3 contienen". Y como el contenido de la línea es el mismo en ambos archivos, la línea real se muestra solo una vez, al final de la salida.

Para aclarar las cosas, tomemos otro caso en el que el cambio se realiza en el archivo 3.

Aquí está el archivo1:

This is line1
This is line2
This is line3

Aquí está el archivo2:

This is line1
This is line2
This is line3

Y aquí está el archivo3:

This is line1 with some change
This is line2
This is line3

El comando sigue siendo el mismo:

diff3 file1 file2 file3

Y aquí está el resultado:

====3
1:1c
2:1c
 This is line1
3:1c
 This is line1 with some change

Entonces, el resultado, en este caso, puede entenderse como:

  • El cambio está en el archivo 3.
  • Tanto el archivo1 como el archivo2 contienen "Esta es la línea1" como primera línea
  • Mientras que el archivo 3 contiene "Esta es la línea 1 con algunos cambios" como primera línea.

Se trataba de cómo los informes diff3 cambian en las líneas. Ahora veamos cómo se comporta diff3 si uno de los archivos contiene una línea adicional:

Si bien el archivo1 y el archivo2 siguen siendo los mismos, aquí está el archivo3:

This is line1
This is line2
This is line3
This is line4

Como se desprende de su contenido, el archivo 3 ahora contiene una línea adicional al final.

Ejecutemos el mismo comando diff3:

diff3 file1 file2 file3

Y aquí está el resultado que produce el comando:

====3
1:3a
2:3a
3:4c
 This is line4

El resultado comienza diciendo que el cambio está en el archivo3. El cambio está en la cuarta línea del archivo3 (3:4c), que es una línea completamente nueva en comparación con el archivo1 y el archivo2.

Lo que hemos discutido hasta ahora fueron algunos casos sencillos. Tomemos un par de situaciones ligeramente complejas. Por ejemplo, considere que archivo1, archivo2 y archivo3 contienen lo siguiente:

This is line1
This is line2 with some change
This is line3
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3 with some change

Entonces, ahora tanto el archivo 1 como el archivo 2 contienen cambios, y también en líneas diferentes. Veamos qué produce diff3 en este caso:

====
1:2,3c
 This is line2 with some change
 This is line3
2:2,3c
 This is line2
 This is line3
3:2,3c
 This is line2
 This is line3 with some change

Como puede ver en el resultado que se muestra arriba, la primera línea no contiene ningún número. Esto se debe a que ahora no uno, sino varios archivos contienen cambios. Para diff3, las líneas 2 y 3 de los tres archivos ahora son diferentes. Esa es la razón por la cual, en lugar de un solo número después de los dos puntos (:), la salida ahora contiene un rango: '2,3', lo que significa de la línea 2 a la línea 3.

Tomemos un ejemplo más. Supongamos que esta vez los tres archivos contienen la siguiente información:

This is line1
This is line2
This is line3
This is line4
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3
This is line4
This is line5

Ahora, cuando se ejecuta el comando diff, produce el siguiente resultado:

====
1:4c
 This is line4
2:3a
3:4,5c
 This is line4
 This is line5

Aquí, si intenta comprender, el comando diff3 dice que los cambios se realizan después de la línea 3 en los tres archivos. Mientras que el archivo1 contiene la línea "Esta es la línea4" como cuarta línea, el archivo3 contiene "Esta es la línea4" y "Esta es la línea5" como cuarta y quinta líneas, respectivamente. El archivo2, por otro lado, sólo tiene 3 líneas.

Así que eso fue todo sobre el trabajo básico en diff3. Por si sirve de algo, esto es lo que dice la documentación oficial sobre la herramienta: "Puedes usar el comando diff3 para mostrar las diferencias entre tres archivos. Cuando dos personas tienen realizó cambios independientes a un original común, diff3 puede informar las diferencias entre el original y las dos versiones modificadas, y puede producir un archivo combinado que contenga los cambios de ambas personas junto con advertencias sobre conflictos."

Conclusión

Acabamos de arañar la superficie aquí, Diff3 es capaz de hacer mucho más. Por ejemplo, como también señala la documentación oficial, también puedes usarlo para fusionar cambios. Además, hay muchas opciones de línea de comando que le permiten personalizar la salida del comando y acceder a algunas otras funciones que ofrece. Está todo en la página de manual, revíselo. Quizás también quieras consultar nuestro tutorial del comando sdiff

Artículos relacionados: