Filtros de Fluxo de Texto: cat, sort, uniq, wc, head, tail
O Que Você Vai Conquistar
- Construir pipelines de filtros que processam texto recebido da entrada padrão
- Agregar logs com precisão combinando
sort/uniq - Inspecionar com segurança apenas a parte necessária de arquivos grandes com
head/tail - Extrair campos, converter caracteres e numerar linhas com
cut/tr/nl - Lidar com tarefas de agregação frequentes com one-liners encadeados
Este é o núcleo do objetivo 103.2 do LPIC-1 "Processar fluxos de texto usando filtros". Filtros leem a entrada padrão, transformam-na e escrevem na saída padrão; encadeá-los com pipes os torna poderosos.
Qual Filtro Usar e Quando
| Objetivo | Filtro | Opções-chave |
|---|---|---|
| Reordenar linhas | sort |
-n numérico / -r reverso / -k chave |
| Deduplicar/agregar | uniq |
-c contar / -d apenas duplicatas |
| Contar itens | wc |
-l linhas / -w palavras / -c bytes |
| Ver início/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 números de linha | nl / cat -n |
-b a numerar todas as linhas |
uniq só agrupa duplicatas adjacentes, então quase sempre é combinado com sort. Esse é o padrão mais frequente tanto no exame quanto no trabalho real.
Passos
Passo 1: Concatenar arquivos para a saída padrão
cat access.log cat -n script.sh cat file1 file2 > merged.txt
1 #!/bin/bash
2 echo "start"
3 exit 0
cat concatena múltiplos arquivos. -n adiciona números de linha e -A revela caracteres invisíveis como quebras de linha e tabulações. Para simplesmente visualizar um único 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 -> ordenação reversa por contagem -> top 5" é o idioma padrão de agregação de acessos. uniq -c assume que o passo anterior já 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 é linhas, -w é palavras, -c é bytes (-m é caracteres). Colocado no final de um pipe, fornece diretamente "quantos itens corresponderam".
Passo 4: Fatiar início 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 básico do monitoramento de logs. Combinar head e tail extrai intervalos como "M linhas a partir da linha N".
Passo 5: Extração de colunas e conversão 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. É 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 propósito único é exatamente o que os torna livremente composíveis através de pipes, alcançando agregação e extração 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 idênticas devem primeiro ser tornadas adjacentes pela ordenação. Entender essa restrição torna escrever sort | uniq reflexivo.
Solução de Problemas
Sintoma: uniq -c não agrega duplicatas
Causa: A entrada não está ordenada
Verificação:
sort file | uniq -c
Correção: Sempre coloque sort antes de uniq. Ou use sort -u para ordenar e deduplicar de uma vez (mas então você perde a contagem -c).
Sintoma: sort -n não ordena como esperado
Causa: A coluna numérica contém espaços ou caracteres de unidade, ou a posição da chave não está especificada
Verificação:
sort -k2 -n data.txt
Correção: Especifique o campo de ordenação com -k e o delimitador com -t. Para tamanhos leggiveis por humanos (1K, 2M) use sort -h.
Sintoma: tail -f para de acompanhar atualizações
Causa: O log rotacionou para um inode diferente
Verificação:
tail -F /var/log/syslog
Correção: -f (minúsculo) acompanha o inode, então após a rotação mude para -F (maiúsculo) para acompanhamento baseado no nome do arquivo.
Lista de Verificação
- [ ] Executou o one-liner de agregação
sort | uniq -c | sort -nr - [ ] Usou
wc -lno final de um pipe para contar itens - [ ] Inspecionou apenas a parte necessária de um arquivo grande com
head/tail - [ ] Extraiu campos com
cut -d -f - [ ] Verificou conversão de caracteres e remoção de
\rcomtr
Resumo
| Cenário | Comando | Finalidade |
|---|---|---|
| Agregar | sort | uniq -c | sort -nr |
Ranking de frequência |
| Contar | wc -l |
Contagem de linhas |
| Início/fim | head -n / tail -f |
Fatiamento / acompanhamento |
| Coluna | cut -d: -f1 |
Extração de campo |
| Converter | tr a-z A-Z |
Substituição/remoção por caractere |
Encadear filtros é o padrão fundamental de processamento de texto. Correspondência de padrões mais complexa requer expressões regulares e grep.