Introdução ao `awk`
No vasto universo do Linux, o processamento de texto é uma tarefa onipresente e crucial. Seja analisando logs, extraindo informações de arquivos de configuração ou transformando dados brutos em formatos utilizáveis, a linha de comando oferece ferramentas poderosas. Entre elas, o `awk` se destaca como um utilitário de manipulação de texto e processamento de dados incrivelmente versátil e eficiente. Criado por Alfred Aho, Peter Weinberger e Brian Kernighan (daí o nome AWK), ele é especialmente projetado para trabalhar com dados estruturados em linhas e colunas, permitindo a filtragem, transformação e geração de relatórios de forma programática.
Este artigo é um guia prático para entender e utilizar o `awk` em diversas situações comuns no Linux. Vamos explorar sua sintaxe básica, seus padrões de execução e como aplicá-lo para resolver problemas reais.
Entendendo a Estrutura Básica do `awk`
A sintaxe fundamental de um comando `awk` é a seguinte:
awk 'padrao {acao}' arquivo(s)Onde:
padrao: É uma condição que, se avaliada como verdadeira para uma determinada linha, faz com que aacaoassociada seja executada. Se omitido, a ação é executada para todas as linhas.acao: É um bloco de comandos que o `awk` executará quando opadraofor correspondente. As ações mais comuns envolvem imprimir partes da linha, realizar cálculos ou chamar outras ferramentas.arquivo(s): São os arquivos de onde o `awk` lerá os dados. Se nenhum arquivo for especificado, o `awk` lerá da entrada padrão (stdin).
O `awk` processa os dados linha por linha. Para cada linha lida, ele verifica se algum padrao é satisfeito. Se for, a acao correspondente é executada. Por padrão, o `awk` divide cada linha em campos, separados por espaços em branco (ou um delimitador especificado). Esses campos são acessados através de variáveis especiais:
$0: Representa a linha inteira.$1: Representa o primeiro campo.$2: Representa o segundo campo, e assim por diante.NF: Uma variável especial que contém o número total de campos na linha atual.NR: Uma variável especial que contém o número da linha atual (record number).
Delimitadores de Campo e Registro
Por padrão, o `awk` usa espaços em branco como delimitador de campos (FS - Field Separator) e o caractere de nova linha como delimitador de registro (RS - Record Separator). No entanto, você pode alterar esses delimitadores para se adequar aos seus dados.
Para especificar um delimitador de campo diferente, use a opção -F:
# Exemplo: Processar um arquivo CSV (vírgula como delimitador)awk -F',' '{ print $1, $3 }' dados.csv
Neste exemplo, -F',' define a vírgula como o separador de campos. O comando imprimirá o primeiro e o terceiro campos de cada linha do arquivo dados.csv.
Você também pode definir FS e RS dentro de um bloco BEGIN, que é executado antes do processamento das linhas:
awk 'BEGIN { FS=Foto de Rafael Minguet Delgado no Pexels.