Linhas únicas preservando a ordem
Cole alpha, beta, alpha, gamma, beta, uma por linha, e receba alpha, beta, gamma: cada linha fica onde apareceu primeiro e as 2 cópias posteriores saem. Nada é ordenado. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Texto
- alpha beta alpha gamma beta
- Texto
- alpha beta gamma
- Linhas
- alpha, beta, gamma
- Quantidade
- 3
- Original
- alpha beta alpha gamma beta
Listas reunidas à mão quase sempre trazem repetições: um SKU colado duas vezes, uma linha de log que disparou de novo, um nome ranqueado copiado mais abaixo. O gesto usual na planilha é ordenar a coluna e apagar os gêmeos vizinhos, o que destrói em silêncio a ordem que tornava a lista útil. Linhas únicas preservando a ordem é o contrato oposto. Esta ferramenta lê o texto multilinha de cima para baixo, mantém a primeira ocorrência de cada linha na posição em que ela apareceu e descarta cópias exatas posteriores, para que uma playlist ranqueada, um changelog ou um inventário de primeira vista permaneça na sequência que você já escolheu. Você pode comparar as linhas depois de recortar espaços em branco ao redor e ainda assim guardar a primeira grafia original.
Como as linhas únicas mantêm a ordem de primeira aparição em vez de ordenar
Preservar a ordem ao tornar uma lista única não é o mesmo que ordenar e depois apagar vizinhos. Um pipeline de ordenar-e-unicizar reescreve o ranking: o primeiro SKU que você listou, o primeiro erro que viu e o primeiro nome de uma playlist saltam para a posição alfabética. Quem busca linhas únicas preservando a ordem quer o contrato contrário.
Este motor percorre o arquivo da primeira linha à última, lembra cada linha na primeira vez em que ela aparece, descarta cópias exatas posteriores e deixa as sobreviventes nessa sequência de primeira vista. Ele divide em CR, LF e CRLF para que dumps de Windows, Unix e Mac antigo se comparem com justiça. Cada linha é candidata como foi escrita, inclusive uma primeira linha em branco se existir.
A pertinência usa por padrão uma chave de string exata, então espaços finais e maiúsculas importam. Quando trim é true, a chave de pertinência é a linha sem espaços no início e no fim, mas o texto guardado continua sendo a primeira grafia original que você digitou. Não há colação de locale, nem distância de edição difusa, nem reescrita da última ocorrência.
Use esta página quando a ordem faz parte do significado. Use uma ferramenta de ordenar linhas se quiser A–Z. Use uma deduplicação que ignore maiúsculas quando Apple e apple devam se unir.
Esta landing é para listas únicas de primeira vista que não podem ser reordenadas.
Onde uma lista única de primeira vista justifica o lugar
Desenvolvedores que limpam trechos de log e dumps de histórico de shell precisam de uma lista única da primeira ocorrência antes de colar em tickets, sem mandar o erro mais cedo para o meio alfabético do arquivo. Equipes de produto e merchandising exportam uma coluna de SKU ranqueados como texto simples e querem valores únicos que mantenham a ordem comercial pela qual já lutaram. Editores de playlist, autores de changelog e redatores de currículo colapsam repetições acidentais de copiar e colar e deixam intacta a sequência pretendida.
Administradores de sistemas mesclam allowlists de várias fontes e precisam de um conjunto único determinístico que não reordene entradas confiáveis anteriores. Professores montam conjuntos de vocabulário ou de gabarito sem repetições acidentais da área de transferência. Se mais adiante você precisar de ordenação alfabética, colapso sem maiúsculas, deduplicação CSV por chaves de coluna ou fusão semântica difusa de linhas quase duplicadas, trate isso como intenções de busca e landings distintas em vez de sobrecarregar esta página de linhas-únicas-preservando-ordem.
Casos de uso
Manter listas ranqueadas únicas sem reordená-las
Cole um ranking de merchandising, uma playlist ou uma fila de prioridade e descarte cópias posteriores enquanto a ordem de primeira vista permanece exatamente onde você a colocou.
Limpar logs e históricos na ordem de primeira aparição
Reúna linhas de log ou histórico de shell repetidas para tickets curtos e deixe a ocorrência mais antiga no topo, em vez de ordenar em ordem alfabética.
Perguntas frequentes
Como funcionam as linhas únicas que preservam a ordem?
O motor parte o texto em CR, LF ou CRLF, mantém a primeira ocorrência de cada linha e descarta cópias posteriores. As sobreviventes ficam na ordem de primeira vista. Nada é ordenado.
Qual a diferença em relação a ordenar linhas únicas?
Ordenar e depois unicizar reescreve o ranking em ordem A–Z. Esta ferramenta nunca ordena: a primeira vez que uma linha aparece é a posição que ela guarda. Use uma ferramenta de ordenar linhas se quiser saída alfabética.
O que a opção trim altera?
Quando trim é true, linhas que diferem só por espaços no início ou no fim contam como a mesma linha. O texto guardado continua sendo a primeira grafia original que você digitou, inclusive esses espaços.
O que acontece se text estiver ausente ou vazio?
Uma caixa em branco é tratada como erro do cliente, não como uma lista única vazia bem-sucedida.
Apple e apple contam como a mesma linha?
Não. As linhas são comparadas de forma exata, então uma diferença de maiúsculas faz delas linhas distintas e as duas ficam. Se as maiúsculas não importarem, padronize-as antes.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/str/unique-lines-ordered \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"alpha\nbeta\nalpha\ngamma\nbeta"}'const res = await fetch("https://api.kit.forhosting.com/str/unique-lines-ordered", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "alpha\nbeta\nalpha\ngamma\nbeta"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/unique-lines-ordered",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "alpha\nbeta\nalpha\ngamma\nbeta"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/unique-lines-ordered", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"alpha\\nbeta\\nalpha\\ngamma\\nbeta"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"alpha\nbeta\nalpha\ngamma\nbeta"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/unique-lines-ordered", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"text": "alpha\nbeta\nalpha\ngamma\nbeta"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.unique_lines_ordered",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_chars | 65536 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Entrada vazia é rejeitada com invalid_input em vez de uma string vazia silenciosa, o que protege clientes que esqueceram de vincular um campo. Chamadas API bem-sucedidas custam US$ 0,002 por item.
Como as linhas únicas mantêm a ordem de primeira aparição em vez de ordenar
A varredura é um único passo linear com um conjunto hash, então texto e opções idênticos sempre produzem o mesmo JSON que você pode fixar em testes.
O que você envia, o que recebe de volta e como os erros funcionam
Envie um campo obrigatório chamado text com a string multilinha não vazia que deseja unicizar. Opcionalmente envie trim como booleano ou nas formas de string comuns true, false, yes, no, one ou zero. Quando trim é omitido, vale false: a comparação é exata, inclusive os espaços ao redor. Aliases como input, value, s, content, body e lines são aceitos quando clientes antigos ou geradores de formulário usam esses nomes. text ausente, valor que não é string ou string de comprimento zero disparam invalid_input com uma mensagem que nomeia o campo, e essas falhas não são cobradas. Em caso de sucesso a resposta devolve text com as linhas únicas unidas por quebra de linha, lines como a mesma lista única em um array, count com quantas linhas únicas restam, original como eco da entrada, original_count com quantas linhas foram partidas antes de unicizar, removed com quantas cópias posteriores foram descartadas, first_positions com os índices de origem em base um de cada linha mantida, o flag trim resolvido e method com valor unique_lines_ordered. Checagens clássicas incluem uma lista de frutas ranqueada com banana e apple repetidas que colapsa em três linhas únicas cujos first_positions apontam para as linhas originais, uma lista com preenchimento de espaços que colapsa mais quando trim é true, e uma única linha única que passa inalterada com removed igual a zero. Cargas extremamente longas acima do teto de caracteres documentado falham com invalid_input para que um único pedido não monopolize a memória. O preço das chamadas API bem-sucedidas é a base publicada de US$ 0,002 por item.
Onde uma lista única de primeira vista justifica o lugar
Como esta capacidade é um motor de parse puro, o preço da API é a base publicada de US$ 0,002 por item bem-sucedido e a validação falha não consome saldo. Mantenha as cargas em tamanhos de documento comuns adequados a um isolado Worker, não em dumps de armazém de vários megabytes.
Casos de integração
Montar fixtures estáveis a partir de exportações bagunçadas
Transforme um dump em texto simples de URLs, SKUs ou e-mails em uma lista de linhas únicas para CI, com first_positions ligando cada sobrevivente à linha de origem.
Perguntas técnicas
Quanto custam as linhas únicas que preservam a ordem?
A ferramenta do navegador é gratuita. Pedidos API usam saldo KIT pré-pago a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.