CodeGym /Cursos /Docker SELF /Ordenação e filtragem de arquivos: comandos `sort`, `uniq...

Ordenação e filtragem de arquivos: comandos `sort`, `uniq`, `cut`

Docker SELF
Nível 8 , Lição 3
Disponível

1. Comando sort

O comando sort serve para ordenar linhas em um arquivo de texto. Ele funciona com qualquer formato de texto: de texto simples até CSV. Por padrão, ordena as linhas em ordem alfabética. Contudo, existem várias opções que permitem fazer verdadeiros milagres.

Sintaxe básica

sort [opções] arquivo

Um exemplo simples

Digamos que temos o arquivo names.txt com o seguinte conteúdo:

Charlie
Alice
Bob
David

Podemos ordenar ele em ordem alfabética assim:

sort names.txt

Resultado:

Alice
Bob
Charlie
David

Opções principais do sort

Ordenar em ordem reversa

Se você quiser ordenar as linhas em ordem decrescente, use a opção -r:

sort -r names.txt

Resultado:

David
Charlie
Bob
Alice

Ordenação numérica

Para números, a ordenação alfabética pode não funcionar corretamente. Por exemplo, veja o conteúdo do arquivo numbers.txt:

10
2
5
1

A ordenação alfabética vai gerar:

1
10
2
5

Mas com a opção -n (ordenação numérica):

sort -n numbers.txt

O resultado será correto:

1
2
5
10

Tolerância a espaços

Às vezes, as linhas contêm espaços no início ou no final. Para evitar confusão, use a opção -b:

sort -b arquivo_sujo.txt

Exemplo

Vamos assumir que temos um log de visitas de um site visits.log:

user2 15
user1 5
user3 30
user4 20

Queremos ordenar os usuários pelo número de visitas (segunda coluna). Fazemos assim:

sort -k2 -n visits.log

Aqui, -k2 significa "usar a segunda coluna para ordenação". Resultado:

user1 5
user2 15
user4 20
user3 30

2. Comando uniq

O comando uniq remove linhas repetidas em um arquivo. Mas é importante lembrar: ele só funciona com duplicatas consecutivas. Ou seja, se linhas iguais aparecerem em diferentes partes do arquivo, você precisa ordená-las primeiro.

Sintaxe básica

uniq [opções] arquivo

Exemplo simples

Imagine que temos um arquivo colors.txt:

red
green
green
blue
blue
blue
red

Se apenas usarmos uniq:

uniq colors.txt

O resultado será:

red
green
blue
red

Removendo duplicatas inevitáveis

Primeiro, ordenaremos o arquivo:

sort colors.txt | uniq

Resultado:

blue
green
red

Opções principais do uniq

Contagem de repetições

Se você quiser saber quantas vezes cada linha apareceu, use a opção -c:

sort colors.txt | uniq -c

Resultado:

   3 blue
   2 green
   2 red

Exemplo

No arquivo access.log temos uma lista de endereços IP:

192.168.0.1
192.168.0.2
192.168.0.1
192.168.0.3
192.168.0.1

Queremos saber qual IP apareceu com mais frequência:

sort access.log | uniq -c | sort -rn

Resultado:

   3 192.168.0.1
   1 192.168.0.2
   1 192.168.0.3

3. Comando cut

O comando cut permite extrair partes específicas de linhas, como colunas individuais em um arquivo CSV ou intervalos de caracteres.

Sintaxe básica

cut [opções] arquivo

Exemplo simples

Arquivo data.csv:

Alice,25,Developer
Bob,30,Designer
Charlie,22,Manager

Vamos extrair apenas os nomes (primeira coluna):

cut -d',' -f1 data.csv

Resultado:

Alice
Bob
Charlie

Onde:

  • -d',' — delimitador (vírgula).
  • -f1 — campo (coluna) a ser extraído.

Opções principais do cut

Escolha de intervalo de caracteres

Se nosso arquivo data.csv consistir em colunas de largura fixa:

Alice      25 Developer
Bob        30 Designer
Charlie    22 Manager

Podemos extrair apenas a idade (caracteres de 12 a 14):

cut -c12-14 data.csv

Resultado:

25
30
22

Escolha de múltiplos campos

Se tivermos um arquivo log.csv:

2023-01-01,INFO,Server started
2023-01-02,ERROR,Connection failed
2023-01-03,INFO,Server stopped

Vamos escolher apenas a data e o nível de logs (campos 1 e 2):

cut -d',' -f1,2 log.csv

Resultado:

2023-01-01,INFO
2023-01-02,ERROR
2023-01-03,INFO

4. Exemplo prático: Combinando sort, uniq e cut

Vamos pegar um arquivo de log com os seguintes dados:

user1,192.168.0.1
user2,192.168.0.2
user1,192.168.0.1
user3,192.168.0.3
user2,192.168.0.2
  1. Vamos extrair os endereços IP:
cut -d',' -f2 log.txt
  1. Removemos as duplicatas e as contamos:
cut -d',' -f2 log.txt | sort | uniq -c
  1. Ordenamos pelo número de ocorrências:
cut -d',' -f2 log.txt | sort | uniq -c | sort -rn

Resultado:

2 192.168.0.2
2 192.168.0.1
1 192.168.0.3
1
Tarefa
Docker SELF, nível 8, lição 3
Bloqueado
Ordenação de uma lista de números
Ordenação de uma lista de números
1
Tarefa
Docker SELF, nível 8, lição 3
Bloqueado
Contando linhas únicas
Contando linhas únicas
1
Tarefa
Docker SELF, nível 8, lição 3
Bloqueado
Análise de logs web
Análise de logs web
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION