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

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 awk para extração, filtragem e cálculos; column para alinhamento visual.
  • Em arquivos muito grandes (>100MB), evite pipes desnecessários — awk já pode formatar com printf.
  • Prefira -t do column apenas quando o alinhamento automático for suficiente; para controle fino, use printf no awk.
  • Documente pipelines complexos com comentários ou funções nomeadas.
  • Consulte man awk e man column para 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