La Terminal de Linux (VI). Comandos para Comparar Archivos de Texto

En este post te contaré como puedes comparar el contenido dos archivos de texto (que ha simple vista pueden parecer iguales) para determinar si realmente son iguales o no. Esto quizá no es algo que se necesite hacer muy a menudo, pero en ciertos casos puede venir bien, sobretodo a la hora de comparar archivos con código fuente, archivos de configuración de alguna aplicación, etc.

Para ello vamos a utilizar el interprete de comandos, ya que, como verás al final, esta guía forma parte de la serie de posts dedicados a exprimir al máximo esta herramienta tan potente que tenemos en GNU/Linux. Tienes el resto de posts de la serie enlazados al final.

Anuncios

Comparar Archivos de Texto

Diff

Para el propósito comentado, básicamente nos vamos a utilizar el comando diff en sus múltiples posibilidades.  El comando diff compara dos archivos línea a línea a línea para detectar diferencias entre ellos. La sintaxis básicamente esta:

$ diff [parámetros] [archivo1] [archivo2]

La salida generalmente muestra todos el contenido diferentes entre los dos archivos. El contenido referente al primer archivo pasado por argumento se muestra precedido por «<«, mientras que el referente al segundo archivo por «>».

$ diff texto1 texto2
$

En este caso, he utilizado la opción más básica (sin parámetros) contra dos archivos de texto iguales, que he llamado texto1 y texto2. Como son iguales, no hay ningún output por pantalla.

$ diff texto2 texto2
42a43
> #force_color_prompt=yes

Si utilizas el mismo comando pero habiendo modificado uno de los archivos, diff te mostrara uno a uno todas los caracteres, palabras o frases que no coinciden. En el caso del ejemplo había eliminado una línea de texto de uno de los archivos que contenía el texto: #force_color_prompt=yes. Esta línea está en el segundo archivo (va precedida por «>» en el output) pero no en el primero.

$ diff -b texto2 texto2
42a43
> #force_color_prompt=yes

Con el parámetro [-b] tenemos la opción de hacer la comparación igual que en el caso anterior, pero ignorando todos los espacios en blanco. El output en este caso es básicamente el mismo.

Y aunque se trata de un comando que se utiliza básicamente para comparar archivos de texto, también puedes utilizarlo para comparar archivos que estén en otros formatos, como odt, doc, docx, pdf, mp4, etc., etc.

$ diff word1.odt word2.odt

En este caso he utilizado el comando (sin parámetros) para comparar dos archivos iguales en formato odt. Como ves, si no hay ningún output nos está indicando que los dos archivos que hemos pasado como parámetro son iguales.

$ diff word1.odt word2.odt
Los archivos binarios word1.odt y word2.odt son distintos

Ahora hemos hecho la misma prueba pero con dos archivos odt diferentes. Como puedes ver, en este caso el output no nos muestra las diferencias encontradas (al no ser archivos de texto) pero si que nos indica que los archivos no son iguales.

Cmp

El comando cmp compara dos archivos de texto al igual que diff, pero en este caso hace una comparación byte a byte. La sintaxis es muy similar:

$ cmp [parámetros] [archivo1] [archivo2]

También podemos hacer la prueba con , como doc, odt, pdf, mp4, etc., sin embargo en estos casos solo se limita a indicar si son iguales o no, sin señalar las diferencias. Y ahora veamos algunos ejemplos:

$ cmp texto2 texto2
texto1 texto2 son distintos: byte 1454, línea 43

Como ves, al utilizar el comando en su forma más simple sobre los dos archivos de texto modificados del ejemplo anterior, cmp nos indica que los dos archivos son distintos, y además nos muestra el byte diferente y el número de línea a que corresponde en el texto.

$ cmp -b texto2 texto2
texto1 texto2 son distintos: el byte 1454, en la línea 43 es  12 ^J  43 #

Al utilizar el comando con el parámetro [-b], si hay diferencias entre los dos archivos cmp nos indica como output el byte diferente, el número de línea y el contenido que varía.

Más Sobre la Línea de Comandos

Como ya he comentado al inicio del post, esta guía forma parte de una serie temático de varios posts sobre el uso de la consola en Linux. Justo debajo te enlazo el resto de posts que componen esta series para que tu mismo visites los que consideras que sean de mayor interés. Ahí los tienes:

  1. Introducción al uso de la línea de comandos
  2. Comandos para manejar ficheros y directorios
  3. Consultar información de tu sistema
  4. Escanear y mostrar el contenido de un fichero de texto
  5. Listar y finalizar procesos en ejecución
  6. Comparar ficheros de texto y encontrar diferencias
  7. Compresión y empaquetado de ficheros
  8. Controlar el estado de los diferentes servicios

Si conoces más comandos para obtener información del sistema, ya sea a nivel de hardware, de plataforma, sistema operativo, etc., ya sabes que como siempre me encantara leerte en la sección de comentarios de debajo. Ya sin más, me despido con un fuerte abrazo y esperando verte en el próximo post. Hasta la próxima;)

Categorías LinuxEtiquetas

2 comentarios en “La Terminal de Linux (VI). Comandos para Comparar Archivos de Texto

  1. Luis Aguistin 16 May 2016 — 09:29

    diff y cmp son muy buenos! Post muy útil.

    Otras opciones para comparar archivos de texto: colordiff, vimdiff

    Un vistazo de cómo funcionan: http://www.sysadmit.com/2016/05/linux-diferencias-entre-dos-archivos.html

    Me gusta

    1. Hola Luis!!
      Muchas Gracias por el comment y el feedback!
      Sin duda tomo nota de estos dos comandos. Tengo tu post en favoritos para leermelo este finde;)
      Saludos y hasta pronto!!

      Me gusta

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.

search previous next tag category expand menu location phone mail time cart zoom edit close