Skip to content

Usos do comando Sort do Linux

23 de abril de 2021

Neste artigo

Os dados em um arquivo de texto do Linux podem ser classificados com o comando sort, desde que cada elemento seja delimitado de alguma forma. Freqüentemente, a vírgula é usada como separador para informações delimitadas.

David Lees / Iconica / Getty Images

Regras básicas para classificação

O comando sort reorganiza as linhas em um arquivo de texto para ordenar as linhas numericamente e alfabeticamente. As regras padrão para o comando sort são:

  • O texto que começa com um número aparece antes do texto que começa com uma letra; os números mais baixos são classificados primeiro.
  • O texto que começa com uma letra que aparece no alfabeto antes da primeira letra de outras entradas de texto é classificado antes do texto que começa com uma letra que aparece mais tarde no alfabeto.
  • Quando o texto começa com ocorrências em maiúsculas e minúsculas da mesma letra, a ocorrência em minúsculas é classificada primeiro.

Classificar um arquivo de texto

Para classificar as linhas em um arquivo Linux delimitado, use o comando sort como este: sort -k2 table1.txt

Este comando classifica o arquivo table1.txt de acordo com os caracteres que começam na segunda coluna (k2 refere-se à segunda coluna). Supondo que o conteúdo do arquivo de entrada seja: 1, Justin, Timberlake, Title 545, Preço $ 7,30
2, Taylor, Swift, Title 723, Preço $ 7,90
3, Mick, Jagger, Título 610, Preço $ 7,90
4, Lady, Gaga, Título 118, Preço $ 7,30
5, Johnny, Dinheiro, Título 482, Preço $ 6,50
6, Elvis, Presley, Título 335, Preço $ 7,30
7, John, Lennon, Título 271, Preço $ 7,90
8, Michael, Jackson, Título 373, Preço $ 5,50

Como a segunda coluna neste exemplo contém os primeiros nomes, a saída classificada é organizada pela primeira letra do primeiro nome de cada indivíduo na segunda coluna, conforme mostrado abaixo: 6, Elvis, Presley, Título 335, Preço $ 7,30
7, John, Lennon, Título 271, Preço $ 7,90
5, Johnny, Dinheiro, Título 482, Preço $ 6,50
1, Justin, Timberlake, Título 545, Preço $ 7,30
4, Lady, Gaga, Título 118, Preço $ 7,30
8, Michael, Jackson, Título 373, Preço $ 5,50
3, Mick, Jagger, Título 610, Preço $ 7,90
2, Taylor, Swift, Title 723, Preço $ 7,90

Se você classificar o arquivo com -k3 (usando o conteúdo da linha começando na coluna 3, a coluna Sobrenome), a saída é: 5, Johnny, Dinheiro, Título 482, Preço $ 6,50
4, Lady, Gaga, Título 118, Preço $ 7,30
8, Michael, Jackson, Título 373, Preço $ 5,50
3, Mick, Jagger, Título 610, Preço $ 7,90
7, John, Lennon, Título 271, Preço $ 7,90
6, Elvis, Presley, Título 335, Preço $ 7,30
2, Taylor, Swift, Title 723, Preço $ 7,90
1, Justin, Timberlake, Título 545, Preço $ 7,30

e -k5 produz uma lista ordenada por preço: 4, Lady, Gaga, Title 118, Preço $ 7,30
7, John, Lennon, Título 271, Preço $ 7,90
6, Elvis, Presley, Título 335, Preço $ 7,30
8, Michael, Jackson, Título 373, Preço $ 5,50
5, Johnny, Dinheiro, Título 482, Preço $ 6,50
1, Justin, Timberlake, Título 545, Preço $ 7,30
3, Mick, Jagger, Título 610, Preço $ 7,90
2, Taylor, Swift, Title 723, Preço $ 7,90

Espere, isso não funcionou, não é? Em vez de classificar por preço, o comando classificou a lista pelo número do título. Por quê? Bem, a menos que seja fornecido o delimitador no qual deve quebrar cada linha em colunas, ele usa espaços. Como há um espaço no meio de cada entrada de título, a coluna quatro de cada entrada se torna a palavra “Título” e a coluna cinco se torna o número do título. Use o sinalizador -t para especificar o delimitador para classificação. Isso controla exatamente onde o comando separa as colunas. sort -t, -k5 table1.txt

Isso produz o resultado desejado: 8, Michael, Jackson, Título 373, Preço $ 5,50
5, Johnny, Dinheiro, Título 482, Preço $ 6,50
1, Justin, Timberlake, Título 545, Preço $ 7,30
4, Lady, Gaga, Título 118, Preço $ 7,30
6, Elvis, Presley, Título 335, Preço $ 7,30
2, Taylor, Swift, Title 723, Preço $ 7,90
3, Mick, Jagger, Título 610, Preço $ 7,90
7, John, Lennon, Título 271, Preço $ 7,90

Normalmente, você deseja especificar o delimitador. Ele evita confusão indesejada e resultados imprecisos. Isso é especialmente verdadeiro com arquivos maiores que nem sempre podem estar obviamente incorretos.

Reverter uma classificação

O -r opção inverte a classificação. Por exemplo, usando os resultados acima: sort -r -t, -k5 table1.txt

rendimentos: 7, John, Lennon, Título 271, Preço $ 7,90
3, Mick, Jagger, Título 610, Preço $ 7,90
2, Taylor, Swift, Title 723, Preço $ 7,90
6, Elvis, Presley, Título 335, Preço $ 7,30
4, Lady, Gaga, Título 118, Preço $ 7,30
1, Justin, Timberlake, Título 545, Preço $ 7,30
5, Johnny, Dinheiro, Título 482, Preço $ 6,50
8, Michael, Jackson, Título 373, Preço $ 5,50

Salvar um arquivo classificado

Classificar um arquivo não o salva. Para salvar a lista classificada em um arquivo, use o operador de redirecionamento: sort -k6 table1.txt> test_new.txt

Onde test_new.txt é o novo arquivo.

Classificar uma saída de fluxo

Você também pode aplicar o comando sort à saída de um fluxo, como o operador de pipe: ls -n | sort -t, -k5

Isso classifica a saída da listagem de arquivos gerada pelo ls comando por tamanho de arquivo, começando com os arquivos maiores. O -n operador especifica classificação numérica em vez de alfabética.