Filtros de Fluxo de Texto: cat, sort, uniq, wc, head, tail
O Que Voce Vai Conquistar
- Construir pipelines de filtros que processam texto recebido da entrada padrao
- Agregar logs com precisao combinando
sort/uniq - Inspecionar com seguranca apenas a parte necessaria de arquivos grandes com
head/tail - Extrair campos, converter caracteres e numerar linhas com
cut/tr/nl - Lidar com tarefas de agregacao frequentes com one-liners encadeados
Este e o nucleo do objetivo 103.2 do LPIC-1 "Processar fluxos de texto usando filtros". Filtros leem a entrada padrao, transformam-na e escrevem na saida padrao; encadea-los com pipes os torna poderosos.
Qual Filtro Usar e Quando
| Objetivo | Filtro | Opcoes-chave |
|---|---|---|
| Reordenar linhas | sort |
-n numerico / -r reverso / -k chave |
| Deduplicar/agregar | uniq |
-c contar / -d apenas duplicatas |
| Contar itens | wc |
-l linhas / -w palavras / -c bytes |
| Ver inicio/fim apenas | head / tail |
-n quantidade / tail -f acompanhar |
| Extrair colunas | cut |
-d delimitador / -f campo |
| Substituir/remover chars | tr |
-d remover / -s comprimir |
| Adicionar numeros de linha | nl / cat -n |
-b a numerar todas as linhas |
uniq so agrupa duplicatas adjacentes, entao quase sempre e combinado com sort. Esse e o padrao mais frequente tanto no exame quanto no trabalho real.
Passos
Passo 1: Concatenar arquivos para a saida padrao
cat access.log cat -n script.sh cat file1 file2 > merged.txt
1 #!/bin/bash
2 echo "start"
3 exit 0
cat concatena multiplos arquivos. -n adiciona numeros de linha e -A revela caracteres invisiveis como quebras de linha e tabulacoes. Para simplesmente visualizar um unico arquivo, less lida melhor com arquivos grandes.
Passo 2: Ordenar e agregar duplicatas
sort access.log | uniq -c | sort -nr | head -n 5
143 GET /index.html
97 GET /login
61 POST /api/data
28 GET /favicon.ico
12 GET /robots.txt
"sort -> uniq -c para contar -> ordenacao reversa por contagem -> top 5" e o idioma padrao de agregacao de acessos. uniq -c assume que o passo anterior ja ordenou a entrada.
Passo 3: Contar linhas, palavras e bytes
wc -l access.log wc -lwc README.md
10234 access.log 120 856 5421 README.md
-l e linhas, -w e palavras, -c e bytes (-m e caracteres). Colocado no final de um pipe, fornece diretamente "quantos itens corresponderam".
Passo 4: Fatiar inicio e fim
head -n 20 large.csv tail -n 50 syslog tail -f /var/log/nginx/access.log
2026-05-17 10:01:22 INFO start 2026-05-17 10:01:23 INFO ready
tail -f exibe linhas adicionadas em tempo real, o basico do monitoramento de logs. Combinar head e tail extrai intervalos como "M linhas a partir da linha N".
Passo 5: Extracao de colunas e conversao de caracteres
cut -d: -f1,7 /etc/passwd echo "Hello World" | tr 'a-z' 'A-Z' cat data.txt | tr -s ' ' | tr -d '\r'
root:/bin/bash daemon:/usr/sbin/nologin HELLO WORLD
cut -d: -f1 extrai a primeira coluna delimitada por :. tr converte ou remove caracteres; -s comprime caracteres repetidos em um e -d remove caracteres especificados. E comumente usado para remover \r originados do Windows.
Por Que Encadear Filtros
Cada filtro segue a filosofia Unix de "fazer uma coisa bem". sort apenas reordena; uniq apenas lida com duplicatas adjacentes. Ser de proposito unico e exatamente o que os torna livremente composiveis atraves de pipes, alcancando agregacao e extracao sem escrever uma ferramenta dedicada enorme.
uniq lida apenas com duplicatas adjacentes porque processa o fluxo linha por linha sem manter estado. Para lidar com duplicatas de toda a entrada, linhas identicas devem primeiro ser tornadas adjacentes pela ordenacao. Entender essa restricao torna escrever sort | uniq reflexivo.
Solucao de Problemas
Sintoma: uniq -c nao agrega duplicatas
Causa: A entrada nao esta ordenada
Verificacao:
sort file | uniq -c
Correcao: Sempre coloque sort antes de uniq. Ou use sort -u para ordenar e deduplicar de uma vez (mas entao voce perde a contagem -c).
Sintoma: sort -n nao ordena como esperado
Causa: A coluna numerica contem espacos ou caracteres de unidade, ou a posicao da chave nao esta especificada
Verificacao:
sort -k2 -n data.txt
Correcao: Especifique o campo de ordenacao com -k e o delimitador com -t. Para tamanhos leggiveis por humanos (1K, 2M) use sort -h.
Sintoma: tail -f para de acompanhar atualizacoes
Causa: O log rotacionou para um inode diferente
Verificacao:
tail -F /var/log/syslog
Correcao: -f (minusculo) acompanha o inode, entao apos a rotacao mude para -F (maiusculo) para acompanhamento baseado no nome do arquivo.
Lista de Verificacao
- [ ] Executou o one-liner de agregacao
sort | uniq -c | sort -nr - [ ] Usou
wc -lno final de um pipe para contar itens - [ ] Inspecionou apenas a parte necessaria de um arquivo grande com
head/tail - [ ] Extraiu campos com
cut -d -f - [ ] Verificou conversao de caracteres e remocao de
\rcomtr
Resumo
| Cenario | Comando | Finalidade |
|---|---|---|
| Agregar | sort | uniq -c | sort -nr |
Ranking de frequencia |
| Contar | wc -l |
Contagem de linhas |
| Inicio/fim | head -n / tail -f |
Fatiamento / acompanhamento |
| Coluna | cut -d: -f1 |
Extracao de campo |
| Converter | tr a-z A-Z |
Substituicao/remocao por caractere |
Encadear filtros e o padrao fundamental de processamento de texto. Correspondencia de padroes mais complexa requer expressoes regulares e grep.