Cómo comparar dos archivos CSV y ver qué cambió

La forma más rápida de comparar dos archivos CSV es pegar ambos en una herramienta de diff lado a lado, alinear las columnas y leer las filas que resalta. La comparación es la parte fácil. El ruido es lo que le complica la vida a la gente: una exportación reordenada, un punto y coma en lugar de una coma, o un valor que alguien envolvió entre comillas pueden hacer que dos archivos con los mismos datos parezcan no tener nada en común.

Esta guía explica cómo obtener un diff de CSV limpio y confiable. Veremos por qué dos exportaciones equivalentes se distancian en papel, qué métodos vale la pena conocer y un ejemplo práctico que puedes seguir. Si solo quieres la herramienta, nuestra página de comparación CSV hace todo esto en el navegador.

Por qué los archivos CSV son engañosamente difíciles de comparar

CSV parece simple, pero no tiene un único estándar estricto. Lo más cercano es RFC 4180, y muchos archivos del mundo real no lo siguen. Dos exportaciones de la misma tabla pueden diferir en delimitador, comillas, finales de línea y orden de filas mientras describen exactamente los mismos datos. Un diff de texto plano no sabe nada de eso, así que lo marca todo.

Esto es lo clave que debes decidir antes de empezar: ¿te importa el orden de las filas? Una exportación de base de datos ordenada por nombre y la misma exportación ordenada por ID contienen el mismo conjunto idéntico de registros, pero un diff de líneas pintará casi cada fila de rojo y verde. Si las filas tienen una clave estable (una columna de ID), ordenar ambos archivos por esa clave primero vuelve a hacer el diff legible.

Parece un cambio, pero casi nunca lo es
Lo que ves en el diff¿Es un cambio real?Qué hacer
Filas en orden diferenteNo, si los datos son el mismo conjuntoOrdena ambos archivos por una columna clave
Delimitador coma vs punto y comaNo, mismos camposNormaliza a un solo delimitador
Ada vs "Ada"No, las comillas son opcionales aquíNormaliza las comillas
Finales de línea CRLF vs LFNoNormaliza los finales de línea
Una línea vacía al finalNoElimínala
El valor de una celda cambióInvestígalo, esto es real

La fila del delimitador confunde a mucha gente, sobre todo entre regiones: muchas configuraciones europeas usan punto y coma porque la coma es el separador decimal. Mismos datos, separador diferente. Si quieres el detalle sobre cómo los navegadores y las herramientas leen texto tabular, la nota de MDN sobre leer archivos en el navegador es un buen punto de partida.

Cuatro formas de comparar CSV y cuándo usar cada una

No existe un único método mejor. Depende del tamaño de los archivos y de si el orden de filas importa. Así se comparan las opciones más comunes.

MétodoMejor paraEsfuerzo¿Entiende CSV?
Revisión visualArchivos diminutos, un puñado de filasBajoNo, tú eres el parser
Herramienta diff onlineVerificaciones rápidas, pegar desde cualquier lugarBajoFila por fila, sí
App de hoja de cálculoRevisión visual, fórmulas, filtradoMedioSí, pero manual
Línea de comandos (sort, csvkit)Archivos grandes, scripting, comparaciones por claveMedioSí, cuando ordenas primero

Para la mayoría de las personas, una herramienta de navegador gana en velocidad: nada que instalar, y puedes pegar una exportación directamente desde una descarga o un cliente de base de datos. El truco está en el ruido del orden de filas y del delimitador, que abordamos a continuación. Para archivos muy grandes, vale la pena aprender csvkit en la línea de comandos.

La comparación limpia más rápida, paso a paso

Esta es la rutina que uso cuando alguien me da dos exportaciones y pregunta "¿qué es diferente?" Tarda menos de un minuto.

  1. Asegúrate de que ambos archivos usen el mismo delimitador y tengan la misma fila de encabezado.
  2. Si el orden de filas no importa, ordena ambos archivos por una columna clave primero.
  3. Abre la herramienta de comparación CSV.
  4. Pega el original a la izquierda y la nueva versión a la derecha.
  5. Lee el resultado. El verde es una fila añadida, el rojo es una fila eliminada, y una celda modificada aparece como una de cada color.

El paso dos es todo el truco cuando las filas no están ordenadas. Una vez que ambos archivos están ordenados de la misma forma, lo único que queda por resaltar son las filas que realmente cambiaron. Nuestro motor de diff está construido sobre el diff-match-patch de Google, que compara línea por línea primero para que sea rápido incluso en archivos largos.

Un ejemplo práctico

Supón que estás revisando un cambio en una tabla de usuarios. Aquí está el antes:

id,name,role,seats
7,Ada Lovelace,editor,3
8,Alan Turing,viewer,1

Y aquí está el después, exportado en un orden de filas diferente:

id,name,role,seats
8,Alan Turing,viewer,1
7,Ada Lovelace,admin,5

Mete esos en un diff de líneas crudo y ambas filas de datos parecen cambiadas, porque intercambiaron posición. Ordena ambos por la columna id, y la historia real es breve:

Lo que realmente cambió
Fila (por id)ColumnaAntesDespuésCambio
7roleeditoradminModificado
7seats35Modificado
8Sin cambios (solo se movió)

Una edición real: el rol y el número de asientos de Ada cambiaron. La fila de Alan solo se movió. Ese ascenso de editor a admin es exactamente el tipo de cosa que quieres detectar en revisión, y es fácil perdérselo cuando está enterrado bajo filas que el diff marcó erróneamente como cambiadas.

Eliminar el ruido del orden de filas en la línea de comandos

Si tus archivos ya están en disco y las filas no tienen un orden inherente, la misma idea de "ordenar primero" funciona con dos comandos cortos. Mantén el encabezado en su lugar y ordena el resto:

(head -1 old.csv; tail -n +2 old.csv | sort) > old.sorted.csv
(head -1 new.csv; tail -n +2 new.csv | sort) > new.sorted.csv
diff old.sorted.csv new.sorted.csv

Ahora diff solo reporta filas que realmente cambiaron, porque ambos archivos están en el mismo orden. Para comparaciones por clave que también ignoran el orden de columnas, csvsort y csvjoin de csvkit te dan más control. Este es el equivalente en terminal de ordenar ambos lados antes de comparar en el navegador.

Delimitadores, comillas y la realidad desordenada

Los archivos CSV reales rompen las reglas constantemente. Un campo que contiene una coma debe ir entre comillas, así que "Lovelace, Ada" es un campo, no dos. Las comillas dentro de un campo entre comillas se duplican: "Ella dijo ""hola""". Y el separador mismo varía: las hojas de cálculo en configuraciones con coma decimal exportan con punto y coma, y los archivos separados por tabuladores (TSV) son comunes en los pipelines de datos. Antes de comparar, asegúrate de que ambos archivos usen el mismo delimitador y la misma convención de comillas, o normalízalos con un parser que siga RFC 4180. De lo contrario, el diff está comparando dos dialectos diferentes, no dos versiones de los mismos datos.

Errores comunes que debes vigilar

ErrorPor qué dueleSolución
Delimitadores no coincidentesComa vs punto y coma hace que cada campo parezca diferenteNormaliza a un solo delimitador primero
BOM al inicioUna marca de orden de bytes oculta cambia la primera celda del encabezadoElimina el BOM antes de comparar
IDs con ceros a la izquierdaUna hoja de cálculo puede haber convertido 007 en 7Mantén las columnas de ID como texto; compara como cadenas
Saltos de línea incrustadosUn campo entre comillas puede contener un salto de línea, desplazando cada fila posteriorUsa un parser CSV real, no una división por líneas
Espacios al final en las celdasEspacios invisibles aparecen como un cambioRecorta los valores de las celdas antes de comparar

Cuándo una hoja de cálculo es la mejor herramienta

Un diff de texto es perfecto para detectar qué filas cambiaron y revisar el cambio como datos. Pero si necesitas filtrar, pivotar o comparar por fórmula a través de miles de filas, una hoja de cálculo encaja mejor: importa ambos archivos, alinéalos por clave y usa una búsqueda para marcar las discrepancias. Los dos enfoques se complementan. Usa el diff para una lectura visual rápida y la hoja de cálculo cuando necesites segmentar los datos. Para las reglas del formato subyacente en cualquier caso, el resumen de CSV de Wikipedia es una referencia sólida.

Herramientas relacionadas

CSV rara vez es el único formato que manejas. Si los mismos datos también viven como JSON, comparar JSON aplica la misma idea. Eliminar duplicados de una columna de valores es rápido con eliminar líneas duplicadas, y poner las filas en un orden predecible antes de un diff es para lo que está ordenar líneas.

Preguntas frecuentes

¿Comparar archivos CSV online los sube a algún servidor?
En comparetext.org el diff se ejecuta en tu navegador. Los dos archivos CSV son comparados por JavaScript en tu propia máquina, así que nada se envía a un servidor a menos que hagas clic explícitamente en Guardar o Compartir. Esto lo hace seguro para exportaciones de clientes, datos financieros y otras hojas de cálculo que no querrías pegar en un sitio que sube todo en cada pulsación de tecla.
¿Por qué mis dos archivos CSV muestran cada fila como diferente?
Casi siempre es el orden de filas o el delimitador, no cambios reales. Una exportación está ordenada de forma diferente a la otra, o una usa comas y la otra puntos y coma, o los finales de línea difieren. Asegúrate de que ambos archivos usen el mismo delimitador, luego ordena ambos por una columna clave para que el orden deje de importar. Después de eso, el diff suele reducirse al puñado de filas y celdas que realmente cambiaron.
¿Cómo comparo dos archivos CSV ignorando el orden de filas?
Ordena ambos archivos por una columna clave estable antes de comparar. Si las filas tienen un ID, ordena por ese; de lo contrario, ordena la fila completa. Mantén la línea de encabezado en su lugar y ordena solo las filas de datos. En el navegador puedes pegar las versiones ordenadas; en la línea de comandos, ordena el archivo después del encabezado. Una vez que ambos archivos están en el mismo orden, solo aparecen en el diff las filas que realmente cambiaron en lugar de cada fila que simplemente se movió.
¿Por qué mi CSV usa puntos y coma en lugar de comas?
Muchas configuraciones europeas usan la coma como separador decimal, así que las apps de hoja de cálculo exportan CSV con un delimitador de punto y coma para evitar ambigüedad. Los datos son los mismos; solo difiere el separador. Antes de comparar dos archivos, asegúrate de que usen el mismo delimitador, o verás cada campo marcado como cambiado. Normalizar ambos a comas (o ambos a puntos y coma) con una herramienta que entienda CSV lo soluciona. Los archivos separados por tabuladores tienen el mismo problema con un separador diferente.
¿Cómo comparo archivos CSV con órdenes de columnas diferentes?
Un diff de texto plano compara filas de izquierda a derecha, así que las columnas reordenadas parecen un cambio total aunque los datos coincidan. Para manejarlo, reordena las columnas para que coincidan en ambos archivos primero, o usa una herramienta que entienda CSV y compare por nombre de encabezado en lugar de por posición. Herramientas de línea de comandos como csvkit pueden seleccionar y reordenar columnas por nombre. Una vez que las columnas se alinean en el mismo orden, un diff normal fila por fila vuelve a funcionar.
¿Puedo comparar archivos CSV grandes sin que la página se congele?
Sí, hasta cierto punto. Un diff en modo de líneas se mantiene rápido en archivos con miles de filas porque compara líneas completas primero en lugar de cada carácter. Los archivos muy grandes (decenas de megabytes o millones de filas) se manejan mejor con una herramienta de línea de comandos como csvkit o una importación a base de datos, que transmiten los datos. Para una exportación que puedas desplazar cómodamente en un navegador, un diff online es la opción más rápida.

¿Listo para probarlo? Pega tus archivos en la herramienta de comparación CSV y ve qué cambió.