Pipes & Processamento de Texto
Componha ferramentas Linux com pipes para filtrar logs, resumir exports CSV e depurar produção - |, jq, awk, sort e uniq antes de recorrer a um script Python.
Busque em todas as páginas da documentação
Componha ferramentas Linux com pipes para filtrar logs, resumir exports CSV e depurar produção - |, jq, awk, sort e uniq antes de recorrer a um script Python.
journalctl -u billing-api --since today | jq -r 'select(.level=="error") | .message' | sort | uniq -c | sort -nr | headQuando usar isso:
curl + jq para smoke tests de API#!/usr/bin/env bash
set -euo pipefail
# Latência da API p95 a partir de logs de acesso estruturados
curl -sf http://localhost:8000/metrics 2>/dev/null | head -1 # pula se não for prometheus
# Logs de aplicação JSON
journalctl -u billing-api --since "30 min ago" -o cat \
| jq -c 'select(.event=="request_complete")' \
| jq -s 'map(.duration_ms) | sort | .[length * 0.95 | floor]'
# CSV: principais clientes por gasto
cut -d, -f2,5 orders.csv | tail -n +2 | sort -t, -k2 -nr | head -10O que isso demonstra:
pipefail falha o script se jq der erro em linha JSON inválidajq -s carrega o stream em um array para matemática de percentilcut + sort para análises CSV simples sem pandasevent de log estruturadostdbuf se necessário.-c compacta um objeto por linha no stream.<(cmd) alimenta a saída do comando como um arquivo para diff/compare.| Objetivo | Pipeline |
|---|---|
| Histograma de erros | ... | jq select(.level) | sort | uniq -c |
| IPs Principais | awk '{print $1}' access.log | sort | uniq -c | sort -nr |
| Filtro de cauda ao vivo | tail -f app.log | rg --line-buffered ERROR |
| Mesclar arquivos ordenados | sort -m file1 file2 |
# Quando o pipeline fica complicado, Python one-liner é aceitável
journalctl -u billing-api -n 500 | python -c "
import sys, json
for line in sys.stdin:
try:
o=json.loads(line)
if o.get('level')=='error': print(o['message'])
except json.JSONDecodeError: pass
"pipefail - Falha silenciosa no meio do pipeline. Correção: set -o pipefail em scripts bash.jq em linhas não JSON - Todo o pipeline para. Correção: jq -R 'fromjson? | select(.)' ou filtre com rg primeiro.sort - Ordem CSV inesperada. Correção: LC_ALL=C sort.jq -s com uso massivo de memória - Falta de memória (OOM) em logs de gigabytes. Correção: awk em streaming ou leitura em blocos com Python.bin/analyze_logs.sh no repositório.LANG incorreto. Correção: export LANG=en_US.UTF-8.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| One-liner pandas | CSV complexo em notebook | Triagem rápida via SSH |
| DuckDB CLI | SQL em arquivos CSV/parquet | Logs JSON já em journald |
| UI de agregador de logs | Datadog/Splunk/Loki | Sem SaaS em produção air-gapped |
| Processador structlog Python | Transformação repetível | Incidente pontual à meia-noite |
jq entende a estrutura; grep perde campos aninhados e falha na reordenação.
Insira tee /tmp/debug.jsonl entre os estágios para inspecionar a saída intermediária.
find logs -name '*.jsonl' -print0 | xargs -0 -P4 jq ... para processamento paralelo de blocos.
awk -F'\t' '{print $1}' - especifique o delimitador explicitamente.
cmd | sponge file do moreutils - mais seguro do que redirecionar para o mesmo arquivo.
echo "a b c" | column -t para saída alinhada legível por humanos.
-F tenta novamente quando o arquivo de log é rotacionado - melhor para ambientes com logrotate.
zcat file.gz | wc -l ou rg -c '' por arquivo.
Promova para o módulo scripts/ com testes quando usado duas vezes.
Este documento visa servidores Linux; desenvolva no Windows usando WSL para os mesmos pipelines.
Versões do Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026