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