Formatação de dados com o uso de awk
1. Introdução ao awk
awk
— uma ferramenta poderosa para manipulação de texto e dados. Se você imaginar um arquivo de texto como sendo uma tabela, onde as linhas são linhas (óbvio, né?) e as colunas são dados separados por espaços, então o awk
vira o seu melhor parceiro. Ele ajuda a selecionar colunas rapidamente, filtrar linhas, formatar dados e até realizar operações aritméticas.
O nome vem dos criadores — Alfred Aho, Peter Weinberger e Brian Kernighan (sim, o mesmo cara que ajudou a criar a linguagem C).
A principal ideia do awk
é processar dados usando padrões e ações, o que o torna uma espécie de mini linguagem de programação.
Sintaxe do awk
A sintaxe básica do comando é assim:
awk 'padrão {ação}' arquivo
padrão
— condição que é checada para cada linha do arquivo.ação
— operações feitas nas linhas que correspondem ao padrão.- Se o padrão não existir, a ação será executada em todas as linhas.
Exemplo:
awk '{print $1}' data.txt
Esse comando imprime a primeira coluna ($1
) de cada linha do arquivo data.txt
.
2. Funcionalidades básicas do awk
1. Seleção de colunas
A maneira mais simples de usar o awk
é selecionar uma ou mais colunas de um arquivo. Um campo é representado como $n
, onde n
é o número da coluna, começando de 1.
Exemplo:
Exibir a primeira e a terceira colunas:
awk '{print $1, $3}' data.txt
Digamos que nosso arquivo data.txt
seja assim:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
Resultado:
John Engineer
Jane Designer
Mike Developer
2. Processamento condicional de linhas
Condições permitem processar apenas as linhas que atendem a determinados critérios.
Exemplo:
Exibir linhas onde o valor na segunda coluna é maior que 27:
awk '$2 > 27 {print $1, $2}' data.txt
Resultado:
Jane 30
Mike 28
3. Operações aritméticas
awk
pode realizar operações aritméticas. Isso é útil quando você precisa calcular algo rapidamente.
Exemplo:
Adicionar 10 ao valor da segunda coluna:
awk '{print $1, $2+10}' data.txt
Resultado:
John 35
Jane 40
Mike 38
4. Contagem de linhas
awk
sabe automaticamente quantas linhas foram processadas. Essa informação está armazenada na variável NR
(Número de Registros).
Exemplo:
Contar o número de linhas no arquivo:
awk 'END {print NR}' data.txt
Resultado:
3
3. Recursos Avançados
1. Formatação de saída
awk
suporta saída formatada poderosa usando a função printf
. Isso é um análogo da função printf
em C.
Exemplo:
Imprimir dados com alinhamento:
awk '{printf "%-10s %-5s %-10s\n", $1, $2, $3}' data.txt
Resultado:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
2. Variáveis
Você pode usar variáveis para armazenar dados e simplificar o trabalho.
Exemplo:
Calcular a soma da segunda coluna:
awk '{sum += $2} END {print "Total Age:", sum}' data.txt
Resultado:
Total Age: 83
3. Expressões regulares
awk
suporta expressões regulares para pesquisar linhas.
Exemplo:
Imprimir linhas onde a primeira coluna contém a letra J
:
awk '/J/ {print $0}' data.txt
Resultado:
John 25 Engineer
Jane 30 Designer
4. Exemplo prático
1. Análise de um log do sistema
Suponha que temos um arquivo de log do sistema /var/log/syslog
, e queremos descobrir quais processos são mencionados com mais frequência.
Comando:
cat /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr | head -10
O que ele faz:
cat /var/log/syslog
— lê o conteúdo do arquivo.awk '{print $5}'
— extrai a quinta coluna (nome do processo).sort
— ordena as linhas alfabeticamente.uniq -c
— conta o número de linhas únicas.sort -nr
— ordena as linhas em ordem decrescente pelo valor numérico.head -10
— exibe os 10 processos principais.
2. Preparando um relatório de salários
Temos um arquivo chamado salaries.txt
:
John 25 4000
Jane 30 5000
Mike 28 4500
Objetivo:
Aumentar os salários em 10% e exibir o relatório final.
Solução:
awk '{new_salary = $3 * 1.1; printf "%-10s %-5s %-10.2f\n", $1, $2, new_salary}' salaries.txt
Resultado:
John 25 4400.00
Jane 30 5500.00
Mike 28 4950.00
5. Erros comuns ao trabalhar com awk
Problemas com delimitadores
Por padrão, o awk
usa espaços ou tabulação como delimitador. Se seus dados estão separados por outro caractere (como vírgulas ou dois-pontos), você precisa especificar isso usando a opção -F
.
Exemplo:
Arquivo data.csv
:
John,25,Engineer
Jane,30,Designer
Mike,28,Developer
Comando para trabalhar com CSV:
awk -F',' '{print $1, $3}' data.csv
Resultado:
John Engineer
Jane Designer
Mike Developer
Ignorando campos por causa de formato errado
Às vezes, as linhas podem conter espaços inesperados ou colunas ausentes. Isso pode causar erros. Sempre é uma boa ideia verificar os dados antes de começar a trabalhar.
Aplicação prática
Você acabou de aprender a usar awk
para analisar logs do sistema, processar dados salariais e criar relatórios. Essas habilidades vão te ajudar a trabalhar com grandes bancos de dados, arquivos CSV e logs em projetos reais. Se você trabalha em DevOps, a análise de logs do sistema usando awk
vai ser sua superpoder. E se você é desenvolvedor, essa é uma ótima maneira de manipular dados rapidamente diretamente do terminal.
Para aprofundar o estudo do awk
, recomendo dar uma olhada na documentação oficial do GNU Awk. Agora você sabe como deixar seus dados mais "obedientes"!
GO TO FULL VERSION