Dicas para transformar dados tabulares no terminal com awk e column
1. Introdução à manipulação de dados tabulares no terminal
Trabalhar no terminal oferece eficiência incomparável para transformar dados brutos em tabelas organizadas. Enquanto interfaces gráficas exigem cliques repetitivos, um simples pipeline de comandos pode processar gigabytes de logs, relatórios financeiros ou saídas de sistema em segundos. A diferença entre dados brutos — geralmente separados por espaços irregulares ou delimitadores inconsistentes — e dados tabulares bem formatados é crucial para legibilidade e automação. Duas ferramentas essenciais nesse contexto são awk, um processador de texto orientado a padrões, e column, um formatador de colunas. Juntos, eles permitem extrair, transformar e alinhar informações de forma rápida e reproduzível.
2. Fundamentos do awk para extração e formatação de colunas
O awk opera linha a linha, dividindo cada registro em campos baseados em um separador (FS, field separator). O comando mais básico é:
echo "João 28 SP" | awk '{print $1, $3}'
Por padrão, awk usa espaços em branco como separador. Para arquivos CSV ou TSV, especificamos o delimitador com -F:
awk -F',' '{print $1, $2}' dados.csv
Variáveis internas como NR (número do registro), NF (número de campos) e OFS (separador de saída) ampliam o controle:
awk -F':' 'BEGIN{OFS=" | "} {print NR, $1, $NF}' /etc/passwd
Esse comando exibe o número da linha, o nome de usuário e o shell padrão, separados por " | ".
3. Técnicas avançadas de awk para transformação de dados
Além de extrair colunas, awk realiza cálculos e filtragens. Para somar valores de uma coluna:
awk '{soma += $3} END {print "Total:", soma}' vendas.txt
Filtragem condicional com padrões é poderosa:
awk '/ERROR/ {print $1, $2, $NF}' app.log
O printf permite formatação precisa, como alinhamento e casas decimais:
awk '{printf "%-20s %8.2f\n", $1, $2}' dados.txt
Isso gera saída com coluna de texto alinhada à esquerda (20 caracteres) e numérica com duas casas decimais.
4. Dominando o comando column para alinhamento e organização
O column transforma dados em tabelas visualmente alinhadas. O uso mais comum é -t (tabular), que detecta automaticamente delimitadores:
cat dados.txt | column -t
Para arquivos com delimitador específico, use -s:
column -s',' -t < usuarios.csv
A opção -o define o separador de saída (padrão é dois espaços). Já -N nomeia colunas (Linux recente):
column -s':' -o' | ' -N "Usuário,UID,GID,Info" -t /etc/passwd
Isso produz uma tabela com cabeçalhos personalizados.
5. Combinando awk e column em pipelines poderosos
A combinação clássica é awk ... | column -t. Exemplo prático com ps:
ps aux | awk '{print $1, $2, $3, $11}' | column -t
Para monitorar espaço em disco de forma legível:
df -h | awk 'NR>1 {print $1, $2, $3, $4, $5}' | column -t
Logs de servidor web podem ser resumidos:
awk '{print $1, $7, $9}' access.log | sort | uniq -c | sort -rn | head -10 | column -t
Esse pipeline extrai IP, caminho e status, conta ocorrências e exibe os 10 mais frequentes em formato tabular.
6. Lidando com desafios comuns: delimitadores irregulares e dados sujos
Dados reais frequentemente têm espaços extras ou delimitadores inconsistentes. Use tr para normalizar:
tr -s ' ' < dados_sujos.txt | awk '{print $1, $2}' | column -t
O sed remove linhas em branco ou caracteres indesejados:
sed '/^$/d' dados.txt | awk -F'|' '{print $1, $3}' | column -s' ' -t
Para converter tabs em espaços, expand é útil:
expand -t 4 arquivo.tsv | column -t
Já unexpand faz o oposto, economizando espaço em arquivos largos.
7. Automação e scripts para processamento recorrente
Crie funções no .bashrc para tarefas frequentes:
function table_ps() {
ps aux | awk '{print $1, $2, $3, $4, $11}' | column -t
}
function table_df() {
df -h | awk 'NR>1 {print $1, $2, $3, $4, $5, $6}' | column -t
}
One-liners práticos:
# Monitorar conexões de rede
netstat -tunap | awk 'NR>2 {print $4, $5, $6}' | column -t
# Verificar maiores processos por memória
ps aux --sort=-%mem | awk 'NR<=11 {print $1, $2, $4, $11}' | column -t
Combine com watch para monitoramento contínuo:
watch -n 2 'ps aux | awk '\''{print $1, $2, $3, $11}'\'' | column -t | head -20'
8. Boas práticas e dicas finais
- Use
awkpara extração, filtragem e cálculos;columnpara alinhamento visual. - Em arquivos muito grandes (>100MB), evite pipes desnecessários —
awkjá pode formatar comprintf. - Prefira
-tdocolumnapenas quando o alinhamento automático for suficiente; para controle fino, useprintfnoawk. - Documente pipelines complexos com comentários ou funções nomeadas.
- Consulte
man awkeman columnpara opções avançadas como-c(largura da tela) ou-R(alinhamento à direita).
Dominar awk e column transforma o terminal em uma poderosa estação de tratamento de dados, ideal para análises rápidas, relatórios automatizados e monitoramento de sistemas.
Referências
- GNU Awk User's Guide — Documentação oficial completa do awk, com exemplos de formatação, variáveis internas e expressões regulares.
- Linux
columnman page — Página de manual oficial do comando column, detalhando opções como -t, -s, -o e -N. - The AWK Programming Language (Aho, Kernighan, Weinberger) — Livro clássico que fundamenta o uso de awk para processamento de texto e dados tabulares.
- LinuxCommand.org: Awk Tutorial — Tutorial prático e acessível sobre awk, com foco em extração e formatação de colunas.
- Command Line Text Processing (Julia Evans) — Artigo técnico com dicas reais de pipelines envolvendo awk, column e outras ferramentas Unix para dados tabulares.