Cálculos com AWK

LinuxBeginner
Pratique Agora

Introdução

Além de filtrar e extrair texto, awk é uma poderosa linguagem de processamento de texto que também pode realizar operações aritméticas. Ela pode somar colunas, calcular médias e contar ocorrências, permitindo gerar relatórios e estatísticas diretamente pela linha de comando.

Essa é uma das razões pelas quais awk continua sendo útil há décadas: muitas tarefas operacionais envolvem a geração de relatórios simples a partir de arquivos de texto, e awk faz isso sem exigir uma planilha completa ou um ambiente de programação separado.

Neste laboratório, você aprenderá a usar awk para:

  1. Inicializar variáveis: definir valores iniciais usando o bloco BEGIN.
  2. Realizar cálculos: criar totais acumulados adicionando valores de cada linha.
  3. Imprimir resultados finais: exibir totais e resumos usando o bloco END.
  4. Contar condicionalmente: contar apenas as linhas que atendem a critérios específicos.

Inicializar uma variável

Antes de começar os cálculos, geralmente precisamos inicializar as variáveis. No awk, o bloco BEGIN é o local ideal para isso, pois é executado uma vez antes do processamento de qualquer linha.

Por isso, BEGIN é o local natural para tarefas de configuração, como inicializar contadores, totais ou cabeçalhos. Ele desempenha o mesmo papel que o código de inicialização em outras linguagens de programação.

Inspecione o arquivo de dados data.txt:

cat data.txt

O arquivo contém duas colunas: Item ($1) e Quantity ($2).

Vamos criar uma variável chamada total e defini-la como 0.

Execute este comando:

awk 'BEGIN { total=0; print "Calculator ready. Total is initialized to:", total }' data.txt

Como funciona:

  1. awk executa o bloco BEGIN.
  2. Define a variável total como 0.
  3. Imprime a mensagem.
  4. Como não há um bloco de código principal depois do bloco BEGIN, a execução para nesse ponto, embora tecnicamente o programa esteja pronto para processar o arquivo.

Somar uma coluna

Agora vamos processar o arquivo. Queremos somar os valores da segunda coluna ($2), que representa a quantidade.

Para cada linha lida pelo awk, adicionaremos $2 à variável total.

A sintaxe para atribuição com adição é total += $2, que é uma forma abreviada de total = total + $2.

É aqui que awk se torna mais do que um simples exibidor de colunas. Ele mantém o estado à medida que percorre o arquivo, permitindo criar totais e resumos progressivamente, em vez de apenas imprimir as linhas originais.

Execute este comando para observar o cálculo linha a linha:

awk 'BEGIN { total=0 } { total += $2; print "Added", $1, "("$2") - Current Total:", total }' data.txt

Lógica:

  • BEGIN: inicializa total com 0.
  • Loop principal: para cada linha, adiciona a quantidade ($2) a total e imprime o status.

Você verá o total aumentar à medida que cada item é processado.

Imprimir o resultado final

Normalmente, você quer apenas o total final, e não as etapas intermediárias.

Para isso, usamos o bloco END. Esse bloco é executado uma vez depois que todas as linhas foram processadas.

Por isso, um script awk geralmente tem três fases: BEGIN para a configuração inicial, o bloco principal para o processamento de cada registro e END para o relatório final. Essa estrutura é um dos modelos mentais mais importantes para usar awk com eficiência.

Execute a versão simplificada do comando:

awk 'BEGIN { total=0 } { total += $2 } END { print "Final Total Quantity:", total }' data.txt

Detalhamento:

  1. BEGIN: define total como 0.
  2. { ... }: lê o arquivo e adiciona $2 a total sem imprimir nada.
  3. END: quando o fim do arquivo é alcançado, imprime o valor final de total.

A saída deve ser Final Total Quantity: 22.

Contagem condicional

Muitas vezes, você precisa contar ocorrências com base em uma condição, em vez de simplesmente somar todos os valores.

Por exemplo: “Quantos itens têm uma quantidade em estoque maior que 4?”

  1. Inicialize um contador (count = 0).
  2. Verifique cada linha: if ($2 > 4).
  3. Se a condição for verdadeira, incremente o contador: count++.
  4. Imprima o resultado no bloco END.

Isso mostra como awk combina análise, condições e operações aritméticas em uma única passagem pelo arquivo. Para muitos relatórios operacionais, isso significa que você pode evitar escrever um programa separado em outra linguagem.

Execute o comando de contagem:

awk 'BEGIN { count=0 } { if ($2 > 4) count++ } END { print "Items with quantity > 4:", count }' data.txt

A resposta deve ser 2 (Apple e Cherry).

Você também pode combinar lógica. O comando a seguir soma apenas os valores maiores que 4:

awk 'BEGIN { sum=0 } { if ($2 > 4) sum += $2 } END { print "Sum of quantities > 4:", sum }' data.txt

A soma é 13 (5 + 8).

Resumo

Neste laboratório, você aprendeu a usar awk para realizar cálculos e gerar estatísticas:

  1. Bloco BEGIN: inicializar variáveis antes do início do processamento.
  2. Aritmética (+=): realizar cálculos, como somar colunas linha a linha.
  3. Condicionais (if): executar lógica apenas quando critérios específicos são atendidos, como na contagem.
  4. Bloco END: exibir os resultados finais depois que o processamento do arquivo for concluído.

Esses recursos permitem gerar resumos e métricas detalhados a partir de arquivos de texto diretamente no terminal.