Eliminar líneas duplicadas
apple, banana, apple, cherry, banana queda en apple, banana, cherry: se quitan 2 líneas repetidas y se conservan 3 únicas en el orden en que aparecieron. También puede tratar Apple y apple como la misma línea. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- apple banana apple cherry banana
- Texto
- apple banana cherry
- Texto original
- apple banana apple cherry banana
- Líneas originales
- 5
- Líneas únicas
- 3
Las líneas duplicadas se cuelan en registros, listas de correo, columnas CSV exportadas como texto plano, historiales de shell, ejemplos de código pegados dos veces y aplicaciones de notas donde el mismo punto se copió más de una vez. Limpiarlas a mano es lento y propenso a errores, sobre todo cuando las diferencias de mayúsculas ocultan verdaderos duplicados o cuando el orden importa y debe conservar la primera aparición en lugar de la última. Esta herramienta toma el texto multilínea que usted introduce, lo divide en líneas y devuelve una cadena deduplicada determinista que preserva el orden original de las primeras ocurrencias. Puede ignorar opcionalmente las mayúsculas para que Apple y apple cuenten como la misma línea mientras se conserva la primera capitalización que escribió. La entrada vacía se rechaza con un error de validación claro en lugar de devolver un resultado vacío en silencio, lo que protege a los clientes que olvidaron enlazar un campo.
Cómo se eliminan los duplicados y la opción de mayúsculas
El motor normaliza los estilos de retorno de carro de modo que CRLF de Windows y CR simple se conviertan en separadores de nueva línea, y luego divide la cadena en cada salto de línea. Cada línea resultante —incluidas las líneas en blanco intencionadas— se considera candidata. La primera vez que se ve una línea se conserva con sus caracteres originales; toda línea posterior que coincida con la clave de comparación se descarta.
Por defecto la comparación es exacta: espacios, puntuación y mayúsculas importan, de modo que espacios finales o Apple frente a apple son líneas distintas. Los recuentos de líneas eliminadas y de líneas únicas se devuelven junto con el texto limpio para que paneles y pruebas puedan comprobar cuánto cambió.
Como la ruta es aritmética de parse puro sobre cadenas —un único recorrido lineal con un conjunto hash de claves vistas—, la latencia se mantiene por debajo del milisegundo en tamaños de formulario típicos y el modelo de coste publicado es analítico, no basado en tokens de modelo. No hay coincidencia difusa, umbral de distancia de edición ni paso de embeddings semánticos; eso corresponde a otras herramientas, como la deduplicación semántica de CSV cuando las filas se parecen pero no son iguales como texto.
Dónde aparece la eliminación de líneas duplicadas en el trabajo real
Los desarrolladores que limpian fragmentos de registro e historiales de shell necesitan una lista única de primera aparición antes de pegarla en tickets o informes de errores. Los equipos de datos que exportan una sola columna como texto plano a menudo quieren valores únicos sin abrir una hoja de cálculo completa ni escribir un script awk de un solo uso.
Los editores de contenido que consolidan listas de etiquetas, nombres de categoría y entradas de glosario usan el modo sin distinción de mayúsculas para que las variantes ortográficas se unan y se conserve la primera capitalización preferida. Estudiantes y profesores preparan listas de vocabulario y conjuntos de líneas de clave de respuesta sin repeticiones accidentales por copiar y pegar. Los administradores de sistemas fusionan listas de bloqueo y de permiso de varias fuentes y necesitan un conjunto único determinista que no reordene entradas fiables anteriores.
Si más adelante necesita deduplicación CSV a nivel de fila con claves de columna, fusión semántica difusa de filas casi duplicadas o hash binario de archivos de imágenes duplicadas, trátelos como intenciones de búsqueda y páginas de aterrizaje distintas en lugar de sobrecargar esta página de eliminar-líneas-duplicadas.
Qué puede hacer con ella
Limpiar fragmentos de registro e historial
Pegue registros multilínea o historial de shell y conserve la primera aparición de cada línea para que tickets e informes sean breves sin perder el orden.
Listas únicas de etiquetas y vocabulario
Colapse etiquetas o líneas de glosario repetidas, ignorando mayúsculas si lo desea, y preserve la primera ortografía preferida.
Preguntas frecuentes
¿Cómo se detectan las líneas duplicadas?
El texto se divide en saltos de línea tras normalizar CRLF. Se conserva la primera ocurrencia; las coincidencias posteriores se descartan.
¿Se preservan las líneas en blanco?
Sí. Una línea vacía es un valor de línea válido. Se conserva la primera línea en blanco; las líneas en blanco adicionales se tratan como duplicados de esa línea vacía.
¿Qué ocurre si el texto está vacío?
Proporcione una cadena no vacía; las cajas vacías se tratan como errores de cliente y no se cobran.
¿Cuánto cuesta?
La herramienta del navegador es gratuita y se ejecuta en local.
¿Qué copia de una línea repetida se conserva?
Siempre la primera. Las copias posteriores se eliminan y las líneas restantes mantienen el orden en que aparecieron por primera vez, de modo que las entradas del principio de una lista nunca se mueven.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/str/dedupe-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"apple\nbanana\napple\ncherry\nbanana"}'const res = await fetch("https://api.kit.forhosting.com/str/dedupe-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "apple\nbanana\napple\ncherry\nbanana"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/dedupe-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "apple\nbanana\napple\ncherry\nbanana"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/dedupe-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"apple\\nbanana\\napple\\ncherry\\nbanana"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"apple\nbanana\napple\ncherry\nbanana"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/dedupe-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "apple\nbanana\napple\ncherry\nbanana"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.dedupe_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Cómo funciona la deduplicación de líneas y qué significa ignore_case
Cuando ignore_case es true, la clave de pertenencia es la forma en minúsculas Unicode de la línea, mientras que la cadena conservada sigue siendo la primera ortografía original que usted proporcionó, que es la expectativa habitual al limpiar listas de contactos y volcados de etiquetas sin reescribir títulos. Las cargas extremadamente largas por encima del tope de caracteres documentado fallan con invalid_input para que una sola solicitud no monopolice la memoria del Worker.
Qué se envía y qué se recibe
Envíe un campo obligatorio llamado text con la cadena multilínea no vacía que desee limpiar. Los números y booleanos usados como cuerpo de texto se convierten a sus formas decimales o true/false; se rechazan objetos, arrays, NaN e Infinity. El texto vacío falla la validación antes de construir el conjunto y no se cobra. Se aceptan alias como input, value, data, s, message, string, content y body por comodidad al conectar clientes antiguos. Opcionalmente envíe ignore_case como booleano o como las formas de cadena habituales true, false, yes, no, one o zero. En caso de éxito la respuesta devuelve text como la cadena deduplicada, original como la cadena de entrada para eco y depuración, original_lines, unique_lines, removed_lines, el indicador ignore_case resuelto y operation con valor dedupe_lines. Las comprobaciones clásicas incluyen una lista de frutas con banana y apple repetidas que se reduce a tres líneas únicas, una lista de mayúsculas mixtas que se colapsa más cuando ignore_case es true, y una sola línea única que pasa sin cambios con removed_lines igual a cero. El precio de las llamadas API correctas es la base publicada de $0.002 por elemento; los fallos de validación, incluido el texto vacío, no consumen saldo prepago.
Dónde aparece la eliminación de líneas duplicadas en el trabajo real
Como esta capacidad es un motor de parse puro, el precio de la API es la base publicada de $0.002 por elemento correcto y la validación fallida no consume saldo.
Casos de integración
Normalizar columnas de exportación como texto
Convierta un volcado de texto plano de una sola columna en una lista de líneas únicas para fixtures, listas de bloqueo y QA sin abrir una hoja de cálculo.
Preguntas técnicas
¿ignore_case cambia la ortografía conservada?
No. Solo la clave de comparación se pone en minúsculas. El texto de línea que se conserva es siempre la primera ortografía original que usted proporcionó.