Filtros de Fluxo de Texto: cat, sort, uniq, wc, head, tail

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 -l no 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 \r com tr

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.

Próximas Leituras

Continue Sua Jornada LPIC-1

Hub LPIC-1

  • Hub de Aprendizado LPIC-1 -- Mapa completo de artigos LPIC-1, acompanhamento de progresso e cobertura dos objetivos do exame

Artigos LPIC-1 Relacionados

Prática