Ordenar linhas: ordene texto alfabeticamente online
Cole uma lista, escolha uma ordem, receba-a ordenada. Com ou sem distinção de maiúsculas, ascendente ou descendente, com natural sort para nomes de ficheiros e cadeias de versão.
O que é a ferramenta de ordenar linhas?
Uma ferramenta gratuita que corre no navegador, recebe um bloco de texto, separa-o por quebras de linha, ordena as linhas e devolve o resultado. Sem registo, sem upload, nada sai da sua máquina. Cole, clique, copie.
Equivale a executar sort na linha de comandos, só que aqui não precisa de lutar contra LC_COLLATE, contra o facto de o macOS trazer um sort BSD antigo, ou contra o facto de o Windows simplesmente não ter sort a menos que instale o Git Bash. Três checkboxes cobrem os casos que realmente quer: ascendente ou descendente, com ou sem distinção de maiúsculas, e natural sort para que file2 apareça antes de file10.
Se já alguma vez colou uma lista de dependências em package.json e ficou a pensar porque é que o npm as reordenou no install seguinte, esta ferramenta reproduz o que o npm 7+ faz para que o diff fique vazio quando o CI correr.
Como o sort funciona por dentro
Por baixo do capô a ferramenta usa a API Intl.Collator do navegador. Isso dá uma função de comparação que compreende Unicode da forma como o Unicode Collation Algorithm (UTS #10) a define, e não uma comparação pura por codepoint. A diferença prática: Intl.Collator sabe que é ordena ao lado de e, que o ß alemão compara igual a ss no nível primário, e que maiúsculas e minúsculas só diferem no nível terciário.
sort lexicographic e sort que respeita a localidade não são a mesma coisa. Um sort puro por codepoint (o que o LC_ALL=C sort dá) coloca todas as maiúsculas antes de todas as minúsculas, porque A é U+0041 e a é U+0061. Um sort com a collation Unicode por defeito intercala-as: A < a < B < b < C. Por defeito usamos a ordem que respeita a localidade, porque corresponde ao que as pessoas esperam quando carregam em Ordenar A-Z no Excel ou no Google Sheets. Marque a checkbox de distinção de maiúsculas para voltar à ordem estilo codepoint.
natural sort é o terceiro eixo. Com ele ligado, file2.log aparece antes de file10.log porque os números embebidos são comparados como números, não carácter a carácter. A Wikipédia tem uma explicação limpa de ordenação natural se quiser o contexto. A implementação usa a opção numeric: true de Intl.Collator, a mesma primitiva que o Finder, o Explorador do Windows e versões recentes do GNU sort -V usam.
Como ordenar linhas em três passos
Um painel a entrar, um painel a sair. Tudo corre localmente; feche o separador e o seu texto desaparece.
- 1
Cole as suas linhas
Largue a sua lista no editor, um item por linha. Linhas em branco no fim não são problema. CRLF e LF funcionam ambos; a saída é normalizada para LF salvo indicação em contrário. O botão Sample preenche o editor com uma pequena lista mista se quiser ver as três opções em acção primeiro.
- 2
Escolha as opções de sort
Escolha Ascendente ou Descendente, ligue Distinguir maiúsculas se precisar que Apple apareça antes de banana, e ligue Natural sort quando estiverem envolvidos nomes de ficheiros ou versões. Remover linhas em branco deita fora linhas vazias antes de ordenar; Remover duplicados colapsa repetições.
- 3
Copie o resultado ordenado
Carregue em Sort. O resultado aparece no painel de saída. Use Copiar para o pôr na área de transferência, ou Descarregar para o guardar como ficheiro .txt. O contador de linhas no cabeçalho mostra quantas linhas saíram, o que é útil quando ligou a deduplicação e quer saber quantos duplicados foram removidos.
Quando ordenar linhas é a ferramenta certa
Ordenar uma lista de emails antes de enviar uma campanha
O marketing cola um CSV de emails de subscritores na ferramenta de campanhas, mas a lista chegou por ordem de inscrição. Ordene-a aqui primeiro alfabeticamente, com a distinção de maiúsculas desligada (já que a parte local de um email é, na prática, insensível a maiúsculas), depois faça dedupe. A importação na ferramenta de campanhas vai ser mais rápida e detecta logo um domínio mal escrito como gmial.com porque fica ao lado do bloco legítimo gmail.com.
Alfabetizar nomes de classes CSS ou ordem de atributos HTML
Algumas equipas impõem nomes de classes alfabéticos em atributos class="..." para manter os diffs dos PR limpos. Cole o valor, ordene, cole de volta. O mesmo truque vale para a ordem de atributos HTML quando um linter se queixa, ou para ordenar à mão classes utilitárias do Tailwind quando não tem o prettier-plugin-tailwindcss instalado no repositório.
Ordenar um .gitignore para que PR futuros tenham diff limpo
Um .gitignore ao qual toda a gente acrescenta vira um caixote de tralha. Ordene-o alfabeticamente uma vez, faça commit, e a partir daí as adições caem em sítios óbvios e o diff faz sentido para os revisores. O mesmo aplica-se a .dockerignore, .eslintignore, e ao array files em tsconfig.json quando as equipas o mantêm.
Limpar uma lista de TODO colada do chat
O Slack e o Discord colam listas com ordem estranha, linhas semivazias e duplicados de pessoas que disseram a mesma coisa duas vezes. Cole, ligue Remover linhas em branco e Remover duplicados, ordene. Fica com uma lista limpa e ordenada para meter no seu gestor de tarefas.
Ordenar uma lista de códigos de país, aeroporto ou moeda
Códigos de país ISO 3166, códigos de aeroporto IATA, códigos de moeda ISO 4217: vivem todos em ficheiros de lookup que beneficiam de estar ordenados. natural sort é desnecessário aqui porque os códigos têm largura fixa, mas a indistinção de maiúsculas importa porque algumas fontes misturam USD com usd. Ordene, faça dedupe, cole de volta na tabela de lookup.
Ordenar uma lista de dependências de package.json
As chaves de dependências de package.json são alfabetizadas pelo npm 7+ em cada install, mas se está a editar num projecto ainda preso ao npm 6 (ou yarn 1) a ordem não muda automaticamente. Cole as chaves de dependências, ordene A-Z, cole de volta. O seu próximo PR não terá um commit de reordenação de 200 linhas por cima da alteração real.
Referência rápida de ordenar linhas
Uma cábula curta sobre as opções de sort que esta ferramenta expõe e os casos limite que cobrem.
| Topic | What this tool does |
|---|
| Lexicographic vs collation | Sort lexicographic (por codepoint) ordena por valor Unicode bruto: A (U+0041) antes de a (U+0061). Sort por collation segue o Unicode Collation Algorithm e intercala maiúsculas e minúsculas. Esta ferramenta usa collation por defeito; marque Distinguir maiúsculas para ordem por codepoint. |
|---|
| Sensibilidade a maiúsculas | Por defeito não distingue: apple, Apple e APPLE comparam iguais. Mude para distinção para ordem A < a < B < b no nível terciário de collation, ou para ordem por codepoint pura quando combinado com a localidade C. |
|---|
| Natural sort | Quando ligado, file2 < file10 porque 2 e 10 são comparados como números. Quando desligado, file10 < file2 porque 1 (U+0031) compara menor que 2 (U+0032) carácter a carácter. Use-o para nomes de ficheiros, cadeias de versão e qualquer lista com números embebidos. |
|---|
| Consciência de localidade | O sort respeita a localidade da página: é ordena ao lado de e em francês, o ä alemão ordena como ae na ordem de lista telefónica DIN 5007-2, e por aí fora. O comando sort de unix faz o mesmo se LC_COLLATE estiver definido; LC_ALL=C sort volta à ordem por codepoint, mais rápida mas trata acentos como letras estranhas. |
|---|
| Tratamento de linhas em branco | Linhas vazias ordenam antes de qualquer linha não vazia em ordem ascendente, por isso ficam no topo. Marque Remover linhas em branco para as eliminar de vez. Uma quebra de linha final no fim da entrada é mantida tal como está, para que a saída faça round-trip por cat e ferramentas semelhantes sem surpresas. |
|---|
| Estabilidade | O sort é estável: linhas que comparam iguais sob as suas definições mantêm a ordem relativa original. Isso interessa quando ordena por um prefixo ou em modo sem distinção de maiúsculas e quer preservar a ordem de entrada dentro de um grupo de empate. Tanto V8 (Chrome, Edge, Node) como SpiderMonkey (Firefox) garantem Array.prototype.sort estável desde 2019. |
|---|
| Fim de linha (LF vs CRLF) | A entrada é dividida em \r\n, \n e \r. A saída é juntada com \n por defeito, por isso cola limpa em fluxos de Linux e macOS. Se precisar de CRLF para uma ferramenta Windows, cole o resultado num editor que conheça Windows e guarde com o fim de linha que quer. |
|---|
| Codificação | A entrada é tratada como UTF-8 (o texto no navegador já vem descodificado). Um BOM UTF-8 inicial é preservado na primeira linha se estiver presente; se o quiser tirar, a ferramenta irmã whitespace-cleaner remove-o. |
|---|
Ordenar linhas: perguntas frequentes
Qual é a ordem de sort por defeito?
Ascendente respeitando a localidade, usando o Intl.Collator do navegador com a localidade da página. Isso significa A < a < B < b da forma como o Excel e o Google Sheets ordenam, não a ordem por codepoint em que toda a maiúscula vem antes de toda a minúscula. Se quer a ordem por codepoint, marque a opção Distinguir maiúsculas, que muda o collator para uma comparação estrita de nível terciário e dá a mesma ordem que LC_ALL=C sort.
O sort distingue maiúsculas ou não?
Não distingue por defeito. Apple, apple e APPLE colapsam todos para a mesma chave, por isso ficam agrupados na saída e a sua ordem relativa é a do que apareceu primeiro na entrada (o sort é estável). Marque Distinguir maiúsculas para os separar; nesse caso APPLE, Apple e apple são ordenados como três valores distintos segundo o nível terciário da collation Unicode por defeito.
Suporta natural sort para nomes como file2 antes de file10?
Sim. Ligue a opção Natural sort e os números embebidos são comparados como números, por isso file2.log aparece antes de file10.log, e v1.9 antes de v1.10. A implementação é a opção numeric: true em Intl.Collator, a mesma primitiva que o Finder do macOS e o Explorador do Windows usam para ordenar nomes de ficheiros.
Posso ordenar ao contrário (Z para A)?
Sim. Escolha Descendente no selector de ordem. O sort corre primeiro em ordem ascendente e depois é invertido, o que preserva a estabilidade entre chaves iguais: se duas linhas comparam iguais sob as suas definições de maiúsculas e natural sort, mantêm a ordem relativa original mesmo depois da inversão. Isso interessa quando ordena por uma chave parcial, como a primeira coluna de um TSV.
O que acontece a linhas duplicadas e linhas em branco?
Por defeito ambas são mantidas. O sort é estável, por isso os duplicados mantêm a sua ordem relativa original, e as linhas em branco juntam-se no topo em ordem ascendente (ordenam antes de qualquer cadeia não vazia). Marque Remover linhas em branco para as descartar antes do sort, e Remover duplicados para colapsar linhas iguais numa só. Para uma passagem dedicada de dedupe com mais opções, use Remover linhas duplicadas.
Há limite de tamanho?
Até cerca de 100.000 linhas corre em menos de um segundo no navegador. Acima de 500.000 linhas começa a sentir, sobretudo porque renderizar o painel de resultado (não o sort em si) fica caro. Para ficheiros de muitos milhões de linhas, o comando sort de unix com LC_ALL=C sort -u file.txt é mais rápido e trabalha fora de memória. O manual do sort do GNU coreutils cobre as flags que vale a pena conhecer.
Privacidade e como isto funciona
O seu texto nunca sai do navegador. A divisão, a comparação e o join correm todos localmente. Sem analítica sobre a sua entrada, sem logs, sem ida ao servidor. A comparação propriamente dita é o Intl.Collator nativo do navegador, que implementa o Unicode Collation Algorithm (UTS #10). Se quiser leitura de fundo, a Wikipédia tem uma visão geral sólida sobre algoritmos de ordenação em geral.