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
- Vamos extrair os endereços IP:
cut -d',' -f2 log.txt
- Removemos as duplicatas e as contamos:
cut -d',' -f2 log.txt | sort | uniq -c
- 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
GO TO FULL VERSION