Skip to content

Eliminar Duplicados

Última verificación mayo 2026 — corre en tu navegador

Eliminar Líneas Duplicadas Online — Filtrar Líneas Únicas y Deduplicar

Pega una lista, log, dataset o cualquier cosa separada por líneas y la página elimina los duplicados en tiempo real. La primera aparición de cada línea se mantiene (así que el orden original sobrevive) y las opciones de distinción de mayúsculas y recorte de espacios te dejan decidir si " Apple", "apple" y "Apple " colapsan a una sola entrada o se quedan como tres. Una línea de estadísticas muestra con cuántas líneas empezaste, cuántas únicas sobrevivieron y cuántos duplicados se eliminaron — útil al limpiar una lista de email exportada, deduplicar filas CSV pegadas desde una hoja de cálculo, o comprimir un logfile a sus mensajes de error únicos antes de seguir grepeando.

Sobre esta herramienta

La deduplicación es una pasada única O(n) sobre las líneas de entrada usando un `Set` de JavaScript indexado por la forma de comparación (minúsculas + opcionalmente recortada). Gana la primera aparición, así que el orden de las líneas restantes coincide exactamente con su primera aparición en la entrada — importante cuando el orden codifica significado (logs con timestamp, listas ordenadas, CSVs ordenados). El recorte de espacios aplica tanto a la clave de comparación COMO a la línea de salida cuando está activado, así que " apple" y "apple " no solo coinciden entre sí sino que también exportan como un "apple" limpio en el resultado. El modo case-insensitive minimiza solo la clave de comparación, así que la línea conservada preserva su capitalización original — "Apple" se mantiene y "apple" se descarta, no al revés. Toda la pasada corre de forma reactiva mientras escribes o pegas, así que una lista de 10.000 líneas se deduplica en decenas de milisegundos. Casos de uso: limpiar una exportación de emails antes de enviar una newsletter, deduplicar una columna CSV pegada desde Excel, colapsar un logfile ruidoso a sus mensajes de error únicos, construir una lista única de etiquetas desde una folksonomía o sanear una wordlist antes de meterla en otra herramienta.

  • Deduplicación O(n) en una sola pasada vía Set de JavaScript
  • Gana la primera aparición — orden original de las líneas restantes preservado
  • Coincidencia case-insensitive opcional (Apple = apple = APPLE)
  • Recorte de espacios opcional (aplica a comparación y a salida)
  • Estadísticas en vivo: líneas originales, únicas, eliminadas
  • Reactivo — corre mientras escribes o pegas, sin botón Run
  • Procesa 10.000+ líneas en decenas de milisegundos
  • Las líneas vacías cuentan como duplicado (la primera se mantiene)
  • Copia con un clic del resultado deduplicado al portapapeles
  • Útil para exportaciones de email, columnas CSV, compresión de logs, limpieza de wordlists

Gratis. Sin registro. Tus datos permanecen en tu navegador. Anuncios mediante Google AdSense (con consentimiento).

Preguntas frecuentes

¿Por qué se mantiene la primera aparición en lugar de la última?

La pasada de deduplicación recorre las líneas de entrada una vez e inserta cada una en un Set de JavaScript indexado por la forma de comparación. ECMA-262 especifica que el orden de iteración del Set es igual al orden de inserción, así que la primera vez que aparece una clave se mantiene la línea original y los duplicados posteriores se descartan. Esto preserva patrones donde el orden codifica significado (logs con timestamp, listas ordenadas, CSVs ordenados) donde la primera fila es la canónica. Si se necesita 'gana la última aparición', el inverso se consigue invirtiendo entrada → deduplicar → invertir salida, pero la mayoría de casos de uso — exportaciones de email, limpieza de CSV, compresión de logs — prefieren 'gana la primera'.

¿Cómo maneja la comparación insensible a mayúsculas los casos extremos de Unicode?

La clave de comparación se genera con String.prototype.toLowerCase, que realiza plegado de mayúsculas Unicode simple — solo mapeos de un carácter. Esto coincide con lo que la mayoría de usuarios esperan ('Apple' = 'apple' = 'APPLE') pero no maneja algunos casos de plegado completo definidos por UCD CaseFolding.txt: la ß alemana se pliega a 'ss' solo bajo plegado completo, y el par I/i sin punto del turco es otro caso clásico dependiente de locale. Para listas cotidianas — emails, CSVs, líneas de log — el plegado simple es correcto; para texto jurídico alemán o turco, redirigir la comparación a Intl.Collator(locale, { sensitivity: 'accent' }) maneja esos casos.

¿Cuál es la complejidad temporal y cómo escala?

El algoritmo es una pasada única O(n) sobre las líneas de entrada. ECMA-262 especifica Set.prototype.has y Set.prototype.add como sublineales; los motores principales (V8, SpiderMonkey, JavaScriptCore) implementan Set sobre tablas hash, donde el O(1) amortizado se sigue del análisis estándar de tablas hash (Knuth, TAOCP Vol 3 §6.4 Hashing). El trabajo total para n líneas de entrada es O(n) inserciones y O(n) búsquedas. La tubería escala linealmente: una lista de 10.000 líneas se deduplica en milisegundos y una lista de 100.000 líneas completa en bastante menos de un segundo en hardware típico. La memoria crece con el número de líneas únicas, no con la longitud de entrada — entradas con muchos duplicados (un log ruidoso con errores repetidos) se comprimen a un conjunto único pequeño.

¿Por qué el recorte de espacios aplica tanto a la clave de comparación COMO a la línea de salida?

Es una decisión de diseño deliberada: cuando 'recortar espacios' está activado, ' apple', 'apple ' y 'apple' no solo se tratan como iguales durante la comparación, sino que todos exportan como un 'apple' limpio en el resultado. Recortar solo para comparación — manteniendo el espaciado original — también es defendible (algunos usos requieren preservar bytes exactos), pero para casos de uso típicos (exportaciones de email, limpieza de CSV, saneado de listas) el usuario quiere ambas cosas: colapsar equivalentes Y limpiar los supervivientes. Si se requiere recorte solo para comparación, pre-procesar con text-replace antes de deduplicar con recorte desactivado consigue eso.

¿Cómo maneja esta herramienta la accesibilidad para lectores de pantalla?

La región de salida y la línea de estadísticas (recuento original, recuento único, recuento eliminado) están dentro de una región aria-live="polite", el patrón del Criterio de Éxito 4.1.3 de WCAG (Mensajes de Estado, introducido en WCAG 2.1, recomendación del W3C del 5 de junio de 2018; trasladado sin cambios a WCAG 2.2, recomendación del 5 de octubre de 2023). Las regiones live polite encolan anuncios tras cualquier habla en progreso, apropiado para actualizaciones incrementales mientras el usuario escribe o pega. Los lectores de pantalla (NVDA, JAWS, VoiceOver) consumen la región live automáticamente; el usuario no necesita hacer nada más.

Fuentes (5)
  • The Unicode Consortium (2024). The Unicode Standard, Version 16.0 — UCD CaseFolding.txt (simple vs full case folding). Unicode Consortium, Mountain View, CA (released 10 September 2024).
  • ECMA International (2025). ECMAScript 2025 Language Specification — Set objects (insertion-order iteration) and String.prototype.toLowerCase. ECMA-262, 16th edition, June 2025.
  • ECMA International (2025). ECMAScript 2025 Internationalization API Specification — Intl.Collator (locale-aware case-insensitive option). ECMA-402, 12th edition, June 2025.
  • Knuth, D. E. (1998). The Art of Computer Programming, Vol. 3: Sorting and Searching — §6.4 Hashing. Addison-Wesley, 2nd edition (amortized O(1) hash-table analysis).
  • World Wide Web Consortium (W3C) (2018). Web Content Accessibility Guidelines (WCAG) 2.1 — Success Criterion 4.1.3 Status Messages. W3C Recommendation 5 June 2018; carried unchanged into WCAG 2.2 (Recommendation 5 October 2023).

Son las publicaciones originales en las que se basan las fórmulas de esta herramienta. Localízalas con el nombre de la revista y el año en Google Scholar o PubMed.

Por ·