Postagem em destaque

Criando bot do Telegram em Shell script com ShellBot

Classificando linhas de arquivos de texto

Sobre

Classificando linhas de arquivos de texto

Descrição

Escrever concatenação ordenada de todos os ARQUIVO(s) para saída padrão.

Para mais informações consulte o manual: sort(1) 


Uso

sort [OPÇÃO]... [ARQUIVO]...
sort [OPÇÃO]... --files0-from=A

Para os exemplos a seguir, criei o arquivo chamado frutas.txt com o seguinte conteúdo:

SHAMAN@shellscriptx:~$ cat frutas.txt
6 abacate JAN
1 uva FEV
2 abacaxi MAR
9 limão ABR
7 melancia JUN
5 pêssego JUL
4 morango AGO
10 banana SET
3 amora OUT
8 laranja DEZ

Seu conteúdo é constituído por itens separados em três colunas, compostas por: quantidade, nome e mês de vencimento da fruta (um por linha).

Exemplos

1. Ordenando as linhas do arquivo. (modo string)
SHAMAN@shellscriptx:~$ sort  frutas.txt
10 banana SET
1 uva FEV
2 abacaxi MAR
3 amora OUT
4 morango AGO
5 pêssego JUL
6 abacate JAN
7 melancia JUN
8 laranja DEZ
9 limão ABR
Apesar dos primeiros caracteres de cada linha serem constituídas de números; Por padrão a utilização do comando 'sort' sem parâmetros realiza uma verificação em modo 'string', não considerando a distinção entre números e letras.

2. Ordenando os itens por quantidade.
SHAMAN@shellscriptx:~$ sort -n frutas.txt
1 uva FEV
2 abacaxi MAR
3 amora OUT
4 morango AGO
5 pêssego JUL
6 abacate JAN
7 melancia JUN
8 laranja DEZ
9 limão ABR
10 banana SET
Ao utilizar o parâmetro '-n' forçamos a ordenação numérica dos itens e assim colocando-os em uma ordem crescente.

Nota: 

Classificando numericamente, onde o número começa em cada linha e consiste em espaços em branco opcionais, um sinal '-' opcional e zero ou mais dígitos, possivelmente separados por milhares de separadores, opcionalmente seguido por um caractere decimal, zero ou mais dígitos. Um número vazio é tratado como '0'. 


A comparação é exata; Não há erro de arredondamento.
 

O sinal '+' ou nenhuma notação exponencial são reconhecidas. Para comparar essas sequências numericamente, use o '--general-numeric-sort' ou '-g.

3. Classificando os itens em ordem alfabética.
SHAMAN@shellscriptx:~$ sort -t' ' -k2 frutas.txt
6 abacate JAN
2 abacaxi MAR
3 amora OUT
10 banana SET
8 laranja DEZ
9 limão ABR
7 melancia JUN
4 morango AGO
5 pêssego JUL
1 uva FEV
Determinando o delimitador entre os campos com o parâmetro '-t' e com o '-k N', definimos em qual coluna será aplicada a ordenação. Note que os nomes das frutas estão agrupados em ordem alfabética.

Nota: 

Usando o SEPARADOR de caractere como separador de campo ao encontrar a CHAVE de classificação em cada linha. Por padrão, os campos são separados por um caractere em branco. Onde o '-k N', define qual N campo será classificado.

Data a linha de entrada '6 abacate JAN', o comando divide os campos como '6', 'abacate' e 'JAN'. O separador de campo não é considerado como parte do campo anterior ou do campo a seguir, de modo com 'sort -t' ""' a mesma linha de entrada tem quatro campos: um campo vazio, '6', 'abacate' e 'JAN'.  No entando, os campos que se estendem a linha, como '-k 2', ou campos consistindo de um intervalo, como '-k 2,3'., retem os separadores de campo presentes entre os pontos de alcance. 

Para especificar ASCII NUL como o separador de campo, use os dois caracteres:

String '\0', por exemplo: 'sort -t "\0"'

4. Classificando as frutas por mês de vencimento.
SHAMAN@shellscriptx:~$ sort -M -t' ' -k3 frutas.txt
6 abacate JAN
1 uva FEV
2 abacaxi MAR
9 limão ABR
7 melancia JUN
5 pêssego JUL
4 morango AGO
10 banana SET
3 amora OUT
8 laranja DEZ
Utilizando o parâmetro '-M' para especificar uma classificação mensal sob o terceiro campo de cada item, tendo como resultado uma ordenação mensal crescente.

Nota:

Uma cadeia inicial, consistindo em qualquer quantidade de espaços em branco, seguida por uma abreviatura de nomes de mês, é convertido para maiúsculo e comparado na seguinte ordem: JAN, FEV, ..., DEZ. Nomes inválidos comparam baixa para nomes válidos. A categoria de localidade 'LC_TIME' determina o mês na grafia padrão, um espaço em branco é um espaço ou uma guia, mas a localidade em 'LC_CTYPE' pode alterar isso.

5. Revertendo a ordem de classificação.
SHAMAN@shellscriptx:~/exemplo$ sort -n -r frutas.txt
10 banana SET
9 limão ABR
8 laranja DEZ
7 melancia JUN
6 abacate JAN
5 pêssego JUL
4 morango AGO
3 amora OUT
2 abacaxi MAR
1 uva FEV
Foi realizada uma classificação numérica nos itens da lista, onde o parâmetro '-r' especifica que deverá ser exibida na sua ordem reversa.

Nota:

Utilizar o parâmetro '--reverse' ou '-r' faz com que os dados da saída padrão sejam classificados na sua ordem reversa preferivelmente.

6. Classificando o sistema de arquivos por tamanho. (ordem decrescente)
SHAMAN@shellscriptx:~$ df -h | tail -n +2 | sort -t ' ' -k2 -h -r
/dev/sdc4       340G   39G  285G  12% /home
/dev/sdc2       111G  6,8G   99G   7% /
tmpfs           7,9G   14M  7,8G   1% /dev/shm
tmpfs           7,9G     0  7,9G   0% /sys/fs/cgroup
udev            7,8G     0  7,8G   0% /dev
tmpfs           1,6G  9,4M  1,6G   1% /run
tmpfs           1,6G   24K  1,6G   1% /run/user/1000
tmpfs           1,6G     0  1,6G   0% /run/user/118
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
Usando o comando 'df' para listar os sistemas de arquivos disponíveis, removendo apenas a primeira linha contendo o cabeçalho das colunas. O comando sort com o parâmetro '-h' classifica a notação base de armazenamento contidas na segunda coluna; Onde são expressadas a capacidade total de cada ponto de montagem, onde são organizadas em capacidade decrescente.

Nota:

Classifica numericamente primeiro pelo sinal numérico (negativo, zero ou positivo); Então pelo sufixo SI (vazio, ou 'k' ou 'K', ou qualquer de 'MGTPEZY", nessa ordem); E finalmente pelo valor numérico.Por exemplo, '1023M' classifica antes de '1G' porque 'M' (mega) precede 'G' (giga) como um sufixo SI. Esta opção classifica os valores que são consistentemente escalados para o sufixo mais próximo, independentemente de os sufixos indicarem poderes de 1000 ou 1024 e, portanto, classifica a saída de qualquer invocação dos comandos 'df', 'du' ou 'ls' que são invocados com suas opções '--human-readable' ou '-si'. A sintaxe para números é a mesma que para a opção '--numeric-sort'; O sufixo SI deve seguir imediatamente o número. Observe também o comando 'numfmt', que pode ser usado para reformatar os números para o formato humano do tipo _after_, permitindo assim que o sort funcione com números mais precisos.  

Para o próximo exemplo criei um arquivo chamado ip.txt com o seguinte conteúdo:

SHAMAN@shellscriptx:~$ cat ip.txt
192.168.1.1
192.168.1.2
192.168.1.3
172.143.2.1
172.143.2.2
172.143.2.3
10.0.0.1
10.0.0.2
10.0.0.3

Estão armazenados inúmeros ranges de IP's, divididos em 3 VLAN's. São elas: 192, 172 e 10.

7. Listando em ordem crescente o último octeto de cada VLAN.
SHAMAN@shellscriptx:~$ sort -t'.' -k4n ip.txt
10.0.0.1
172.143.2.1
192.168.1.1
10.0.0.2
172.143.2.2
192.168.1.2
10.0.0.3
172.143.2.3
192.168.1.3
Especificando o delimitador '.' (ponto) que separa os campos de cada octeto do cabeçalho IP, onde é classificado em ordem numérica o quarto octeto e listar em ordem crescente as faixas de cada VLAN.

Comentários

Contato

Nome

E-mail *

Mensagem *