Resumen: las líneas "duplicadas" no siempre son bytes idénticos — espacios finales, mayúsculas distintas o normalización Unicode diferente pueden ocultar duplicados exactos o crear duplicados falsos. Entender cómo funciona la comparación hace que tu limpieza sea precisa en lugar de borrar accidentalmente líneas que necesitabas. Combina esta guía con Remove Duplicate Lines, Text Difference, Word Frequency y Remove Extra Spaces.

Duplicate Finder en CharCount elimina líneas repetidas de listas, registros, exportaciones CSV y listas de palabras clave. La parte complicada no es eliminarlas — es decidir qué cuenta como "la misma línea" antes de eliminar nada.

Referencias: la referencia de MDN sobre JavaScript Set explica la estructura de datos que la mayoría de herramientas de deduplicación usan internamente, la guía de MDN sobre String.normalize() cubre la normalización Unicode, y el informe Unicode sobre segmentación de texto (UAX #29) define cómo se divide el texto en unidades con significado.

Cómo Encontrar y Eliminar Líneas Duplicadas en un Texto
Cómo Encontrar y Eliminar Líneas Duplicadas en un Texto

Cómo funciona realmente la detección de duplicados

Por dentro, una herramienta de líneas duplicadas recorre cada línea y comprueba si ya se ha visto — normalmente usando un Set, que almacena valores únicos y rechaza duplicados exactos en tiempo constante. Eso es rápido, pero "exacto" hace mucho trabajo en esa frase: un Set compara cadenas byte a byte, así que "Manzana" y "manzana" son entradas distintas, igual que "texto " y "texto" (espacio final).

Por eso una deduplicación ingenua sobre una exportación CSV o una lista de palabras clave extraída a menudo "falla" — no está rota, está comparando exactamente lo que le diste, incluyendo espacios invisibles y diferencias de mayúsculas que no notaste.

Preservar el orden vs. ordenar y luego deduplicar

Hay dos estrategias comunes. La deduplicación que preserva el orden mantiene la primera aparición de cada línea y su posición original — la opción correcta para registros, exportaciones de chat o cualquier cosa donde la secuencia importe. Ordenar y luego deduplicar (como la clásica tubería Unix sort | uniq) reordena todo alfabéticamente primero, lo cual es más rápido en archivos enormes pero destruye el orden original — bien para una lista de palabras clave, mal para un registro de cambios.

Elige preservar el orden siempre que "qué vino primero" importe; elige ordenar-y-deduplicar solo cuando el orden de la lista era arbitrario desde el principio.

Dónde la normalización cambia el recuento

Unicode permite que el mismo carácter visible exista como secuencias de bytes distintas — una "é" acentuada puede ser un único punto de código compuesto (NFC) o una "e" más una marca diacrítica combinante separada (NFD). Dos líneas que parecen idénticas en pantalla pueden fallar una deduplicación de coincidencia exacta si una viene de una exportación de Mac y la otra de Windows, porque están en formas de normalización distintas.

String.normalize('NFC') reduce ambas formas a la misma representación antes de comparar, por eso una buena herramienta de duplicados normaliza el texto primero — de lo contrario subcuenta silenciosamente duplicados que son idénticos visualmente pero no byte a byte.

Un flujo de limpieza más seguro

  • Decide primero: ¿importa el orden de las líneas en esta lista? Eso determina tu estrategia.
  • Elimina espacios finales y normaliza mayúsculas solo si la lista está pensada para ser insensible a mayúsculas (una lista de palabras clave a menudo sí; una lista de contraseñas nunca).
  • Ejecuta la deduplicación, luego revisa una muestra de las líneas eliminadas para confirmar que realmente eran duplicados.
  • Conserva el archivo original hasta verificar la versión limpia.

Para cualquier caso ambiguo, pasa el antes/después por Text Difference para ver exactamente qué se eliminó, y Word Frequency para comprobar que ningún término repetido legítimo se trató como ruido.