De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 27 de agosto de 2026
O comando sort é frequentemente utilizado de uma forma muito simples:
$ sort arquivo.txt
Nesse caso, ele compara as linhas inteiras e as coloca em ordem alfabética. Entretanto, arquivos de dados normalmente possuem várias colunas, e nem sempre queremos considerar todo o conteúdo da linha. Podemos precisar ordenar uma lista pelo nome, pelo salário, por uma data ou até mesmo por apenas alguns caracteres de determinado campo.
Para controlar exatamente qual parte da linha será usada na comparação, utilizamos a opção -k.
A sintaxe básica é:
-k INÍCIO,FIM
O início e o fim indicam os campos que formarão a chave de ordenação.
Considere o arquivo funcionarios.txt:
1003 Carlos Vendas 1001 Ana Suporte 1004 Daniel Vendas 1002 Beatriz Financeiro
Para ordenar pelo primeiro campo, que contém o código, usamos:
$ sort -k1,1 funcionarios.txt
Resultado:
1001 Ana Suporte 1002 Beatriz Financeiro 1003 Carlos Vendas 1004 Daniel Vendas
Para ordenar pelo segundo campo, que contém o nome:
$ sort -k2,2 funcionarios.txt
Resultado:
1001 Ana Suporte 1002 Beatriz Financeiro 1003 Carlos Vendas 1004 Daniel Vendas
A expressão:
-k2,2
informa que a chave começa no segundo campo e também termina no segundo campo. Portanto, somente o nome participa da comparação principal.
Uma das causas mais comuns de resultados inesperados é acreditar que estas duas opções são equivalentes:
$ sort -k2 arquivo.txt
$ sort -k2,2 arquivo.txt
Elas possuem significados diferentes.
A primeira:
-k2
usa como chave todo o conteúdo existente desde o início do segundo campo até o final da linha.
A segunda:
-k2,2
limita a chave exclusivamente ao segundo campo.
Considere:
001 Ana Vendas 002 Ana Financeiro 003 Carlos Suporte 004 Ana Administração
O comando:
$ sort -k2 arquivo.txt
não compara apenas os nomes. Para as três linhas que contêm Ana, ele também considera o departamento, pois a chave continua até o final da linha.
Resultado:
004 Ana Administração 002 Ana Financeiro 001 Ana Vendas 003 Carlos Suporte
Se o objetivo for usar somente o nome, o comando correto é:
$ sort -k2,2 arquivo.txt
Quando os nomes forem iguais, o GNU sort ainda poderá usar a linha completa como critério final de desempate. Para preservar a ordem original das linhas que possuem nomes iguais, acrescente a opção -s:
$ sort -s -k2,2 arquivo.txt
Resultado:
001 Ana Vendas 002 Ana Financeiro 004 Ana Administração 003 Carlos Suporte
Por padrão, o sort reconhece campos separados por espaços em branco. Para trabalhar com outro separador, usamos -t.
Considere o arquivo salarios.txt:
1003;Carlos;5200 1001;Ana;6100 1004;Daniel;4800 1002;Beatriz;7300
Para indicar que os campos estão separados por ponto e vírgula:
$ sort -t';' -k2,2 salarios.txt
Nesse comando:
-t';' define o ponto e vírgula como separador;
-k2,2 limita a chave ao segundo campo.
Para ordenar numericamente pelo salário:
$ sort -t';' -k3,3n salarios.txt
Resultado:
1004;Daniel;4800 1003;Carlos;5200 1001;Ana;6100 1002;Beatriz;7300
O modificador n, colocado no final da chave, determina uma comparação numérica:
-k3,3n
Sem ele, os valores seriam tratados como texto.
Para mostrar os maiores salários primeiro, acrescente r, de ordem inversa:
$ sort -t';' -k3,3nr salarios.txt
Uma chave também pode começar ou terminar em uma posição específica do campo. A sintaxe é:
CAMPO.CARACTERE
Considere o arquivo produtos.txt:
BR-SP-1045 Monitor BR-RJ-1008 Teclado BR-SP-1012 Mouse BR-MG-1031 Impressora
O código da unidade federativa ocupa o quarto e o quinto caracteres do primeiro campo. Podemos ordenar por essa parte usando:
$ sort -k1.4,1.5 produtos.txt
Resultado:
BR-MG-1031 Impressora BR-RJ-1008 Teclado BR-SP-1045 Monitor BR-SP-1012 Mouse
A chave:
-k1.4,1.5
começa no quarto caractere do primeiro campo e termina no quinto caractere desse mesmo campo.
Também podemos selecionar a parte numérica do código, que começa no sétimo caractere:
$ sort -k1.7,1.10n produtos.txt
Resultado:
BR-RJ-1008 Teclado BR-SP-1012 Mouse BR-MG-1031 Impressora BR-SP-1045 Monitor
O modificador n é importante porque informa que essa parte deve ser comparada numericamente.
A seleção de caracteres pode ser usada para ordenar datas no formato DD/MM/AAAA.
Considere:
Ana;31/12/2025 Carlos;05/01/2024 Beatriz;17/08/2025 Daniel;03/02/2025
Uma ordenação textual pelo segundo campo não funciona, pois começaria pelo dia. Para produzir uma ordem cronológica, usamos primeiro o ano, depois o mês e finalmente o dia:
$ sort -t';' \
-k2.7,2.10n \
-k2.4,2.5n \
-k2.1,2.2n \
arquivo.txt
Resultado:
Carlos;05/01/2024 Daniel;03/02/2025 Beatriz;17/08/2025 Ana;31/12/2025
Nesse exemplo, cada parte da data funciona como uma chave independente.
Quando o resultado não for o esperado, o GNU sort oferece a opção --debug:
$ sort --debug -k2,2 arquivo.txt
Ela mostra quais partes das linhas estão sendo interpretadas como chaves. Para uma chave numérica:
$ sort --debug -t';' -k3,3n salarios.txt
O comando sublinha os trechos usados na comparação e pode emitir avisos sobre chaves mal delimitadas, números não reconhecidos ou influência da localidade.
Como o resultado contém marcações de diagnóstico, --debug deve ser usado apenas durante os testes.
O segredo para controlar o sort está em delimitar corretamente suas chaves. Sempre que o objetivo for ordenar por apenas um campo, prefira uma expressão explícita:
$ sort -k2,2 arquivo.txt
em vez de:
$ sort -k2 arquivo.txt
A primeira utiliza somente o segundo campo. A segunda começa no segundo campo e continua até o fim da linha.
Quando for necessário trabalhar com colunas delimitadas, partes de campos ou valores numéricos, podemos combinar -t, posições de caracteres e modificadores:
$ sort -t';' -k3,3nr arquivo.txt
Uma chave cuidadosamente definida torna o resultado mais previsível e evita que informações indesejadas participem da comparação. Esse pequeno cuidado faz uma grande diferença ao usar o sort em scripts, relatórios, arquivos de configuração e conjuntos de dados estruturados.