Voltar ao Diminua Blog

Artigo

Dominando o Comando `awk` no Linux: Manipulação e Processamento de Dados Poderoso

Um guia prático para extrair, transformar e analisar dados de texto de forma eficiente com `awk`.

Dominando o Comando `awk` no Linux: Manipulação e Processamento de Dados Poderoso

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 a acao associada seja executada. Se omitido, a ação é executada para todas as linhas.
  • acao: É um bloco de comandos que o `awk` executará quando o padrao for 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.