Processamento Eficiente no Shell: Encadeando Comandos com Pipes (|)
O operador pipe (|) conecta a saída padrão (stdout) de um comando diretamente à entrada padrão (stdin) do seguinte, permitindo criar fluxos de trabalho avançados sem salvar arquivos intermediários. Esse recurso resolve a necessidade de filtrar, transformar e analisar grandes volumes de texto e logs no Linux combinando utilitários simples.
Bash
#!/bin/bash
# Exemplo prático de processamento e filtragem de logs com pipes
# Simulando um arquivo de log, filtrando mensagens de erro e contando ocorrências
cat << 'EOF' > app.log
[INFO] Sistema iniciado
[ERROR] Falha ao conectar ao banco de dados
[WARN] Uso de memória elevado
[ERROR] Timeout na requisição HTTP
[ERROR] Falha na autenticação do usuário
EOF
# Processamento em cadeia: lê o log, filtra erros, ordena e conta
cat app.log | grep "[ERROR]" | cut -d ' ' -f 2- | sort
# Exemplo de uso prático para contar o total de erros encontrados
TOTAL_ERROS=$(grep "[ERROR]" app.log | wc -l)
echo "Total de erros registrados: $TOTAL_ERROS"
Exemplo de uso prático no terminal:
Bash
# Busca processos que consomem mais memória e exibe os 5 primeiros
ps aux --sort=-%mem | head -n 6
Pontos-chave
- Fluxo de Dados Direto: O pipe redireciona apenas o stdout por padrão; mensagens enviadas para o stderr passam direto para o terminal, a menos que redirecionadas (ex:
2>&1 |). - Execução Paralela: Os comandos ligados por pipes iniciam simultaneamente em subprocessos (subshells) separados, processando os dados à medida que são gerados na fila.
- Exit Status (
PIPESTATUS): O código de retorno de uma cadeia de pipes por padrão é o do último comando executado; useset -o pipefailpara capturar falhas intermediárias em scripts. - Uso Eficiente do
cat: Evite o uso desnecessário decat arquivo | grep termoquando o próprio comando aceita o arquivo diretamente (ex:grep termo arquivo). - Combinação com
xargs: Quando o comando seguinte não aceita entrada padrão (stdin) e exige argumentos de linha de comando, combine o pipe com oxargs.
