Comando sort – Ordenando dados em um arquivo de texto no Linux – LPI 1
Comando sort – Ordenando dados em um arquivo de texto no Linux – LPIC 1
O comando sort é utilizado para organizar os dados dentro de um arquivo, de acordo com a necessidade do usuário, e exibir esses dados classificados na saída padrão, ou redirecionar essa saída a outro arquivo.
Ele permite classificar as linhas de um arquivo de texto de várias formas, como por exemplo alfabeticamente ou numericamente.
Por padrão, ordena de acordo com os dados da primeira coluna de valores do arquivo.
Sintaxe:
sort [opções] [arquivo]
Opções do comando sort:
-b, –ignore-leading-blanks
Ignorar espaçosem branco no início do arquivo
-d, –dictionary-order
Considerar apenas espaços e caracteres alfanuméricos
-f, –ignore-case
Converter caracteres de caixa baixa para caixa alta
-g, –general-numeric-sort
Comparar de acordo com valores numéricos genéricos
-i, –ignore-nonprinting
Considerar apenas caracteres imprimíveis
-M, –month-sort
Classificar por mês (JAN < … < DEZ)
-n, –numeric-sort
Comparar de acordo com valores de string numérica
-o, –output=ARQUIVO
Escreve o resultado em ARQUIVO em vez da saída padrão
-r, –reverse
Ordem reversa
-c, –check
Verificar se a entrada já está ordenada – neste caso, não ordenar.
-t [delimitador]
Especificar um delimitador de colunas para poder ordenar o arquivo por dados em uma coluna que não seja a primeira.
-u, –unique
Mostra apenas a primeira ocorrência de uma string, ou seja, elimina entradas duplicadas.
-k num
Especificar o número num da coluna que será usada para classificar o arquivo. Por padrão, os separadores de campos são os espaços em branco ou tabulações.
–help
Mostrar a ajuda e sair
–version
Mostrar informações sobre a versão e sair.
Exemplos:
1. Vamos classificar os dados do arquivo de grupos do sistema (/etc/group) em ordem alfabética de nome de grupo (coluna 1 do arquivo):
# sort /etc/group
2. Ordenar os grupos do arquivo /etc/group por número de GID (coluna 3 do arquivo):
# sort -n -t: -k3 /etc/group
3. Idem anterior, porém em ordem reversa:
# sort -nr -t: -k3 /etc/group
4. Ordenar os grupos do arquivo /etc/group por número de GID e salvar o resultado no arquivo de nome grupos_ordenados:
# sort -n -t: -k3 /etc/group > grupos_ordenados
5. Ordenar o arquivo /etc/passwd por ordem alfabética de usuário, escrevendo a saída num arquivo chamado de teste:
# sort --output=teste /etc/passwd # cat teste
6. O arquivo vendas possui duas colunas de dados: a primeira coluna mostra o mês da venda, a segunda coluna o nome do produto, e a terceira coluna a quantidade. Porém, as vendas não estão classificadas em nenhuma ordem em particular. Veja:
Crie o arquivo usando seu editor de textos preferido. Na sequência, vamos classificar esse arquivo em ordem de mês de venda:
# sort -M vendas
7. Queremos agora apenas gerar uma listagem de produtos distintos vendidos, sem repetições de nomes. Usaremos o comando sort em conjunto com o comando cut nesse exemplo:
$ cut -f2 vendas | sort -u
Note que sem usar o sort com a opção -u serão retornadas todas as linhas do arquivo, o que incluirá nomes de produtos repetidos.
Também podemos salvar a listagem de produtos geradas em um arquivo para consulta posterior. Por exemplo, vamos salvar a listagem em um arquivo de nome relatorio.txt, e depois visualizar seu conteúdo no terminal:
$ cut -f2 vendas | sort -u > relatorio.txt $ cat relatorio.txt
8. Para ordem reversa de mês do ano: adicionamos a opção -r:
$ sort -M -r vendas.dat
9. Ordenar a lista retornada em ordem alfabética de produto.
Note que os produtos estão na coluna 2, e as colunas são separadas por tabulações nesse arquivo. Assim, o comando ficaria:
$ sort -t $'\t' -k2 vendas.dat
Aqui, $’\t’ é uma forma de representar o caractere tab no Bash.
Assista a um vídeo explicativo sobre o utilitário sort no Linux para obter maiores informações:
Poderia me dizer como faço para classificar(organisar) pelo tamanho das linhas… da menor para maior.