Integração do AWK com Scripts Shell

É comum combinar o processador de texto AWK com scripts Shell para automatizar tarefas complexas. Os dados normalmente são passados para o AWK e seus resultados são formatados para serem úteis de volta no Shell.

1. Incorporando Variáveis do Shell em Comandos AWK

Existem duas técnicas principais para incorporar variáveis do Shell dentro de prograams AWK.

Método 1: Substituição Direta por Aspas

A abordagem mais imediata envolve usar aspas duplas no script AWK, permitindo que o Shell subsittua a variável diretamente.


$ cat conteudo.txt
Sistema - Linux, Windows
Banco - PostgreSQL, MySQL
Rede - TCP/IP, HTTP

$ cat busca_termo.sh
#!/bin/bash
read -p "Informe a palavra-chave: " termo
awk "/$termo/" '{ contagem++; print } END { print contagem " linha(s) encontrada(s)." }' conteudo.txt

Executando o script:


$ ./busca_termo.sh
Informe a palavra-chave: TCP
Rede - TCP/IP, HTTP
1 linha(s) encontrada(s).

Este método, embora funcional, depende da correta interpretação das aspas pelo Shell, o que pode ser confuso.

Método 2: Uso da Opção -v para Atribuição de Variáveis

Uma abordagem mais robusta e legível utiliza a flag -v do AWK para passar o valor da variável do Shell para uma variável interna do AWK. O programa AWK é então delimitado por aspas simples.


$ cat busca_melhorada.sh
#!/bin/bash
read -p "Informe a palavra-chave: " termo
awk -v chave="$termo" '$0 ~ chave { achados++; print } END { print achados " linha(s) correspondente(s)." }' conteudo.txt

Execução:


$ ./busca_melhorada.sh
Informe a palavra-chave: HTTP
Rede - TCP/IP, HTTP
1 linha(s) correspondente(s).

Acessando Variáveis de Ambiente do Shell

O interpretador AWK mantém uma cópia das variáveis de ambiente do Shell em um array chamado ENVIRON. Elas podem ser acessadas pelo nome da variável.


$ awk 'meupath=ENVIRON["PATH"] { print "O valor de PATH é: " meupath }' /dev/null

2. Definindo Variáveis do Shell a Partir da Saída do AWK

A saída de um comando AWK pode ser capturada para atribuir valores a variáveis do Shell.


$ nome_sistema=$(awk -F' - ' '/Sistema/{ print $2 }' conteudo.txt)

$ echo $nome_sistema
Linux, Windows

Para definir múltiplas variáveis a partir da saída de um único comando AWK, o script AWK pode imprimir linhas no formato variável=valor. O comando eval é então usado para interpretar essas linhas no Shell.


$ atribuicoes=$(awk -F' - ' '{
  if ($1 == "Sistema") print "os="$2;
  if ($1 == "Rede") print "proto="$2;
}' conteudo.txt)

$ echo $atribuicoes
os=Linux, Windows proto=TCP/IP, HTTP

$ eval $atribuicoes

$ echo $os
Linux, Windows
$ echo $proto
TCP/IP, HTTP

Alternativamente, a saída do AWK pode ser redirecionada para um arquivo temporário que é depois lido pelo comando source.


$ awk -F' - ' '{ if ($1 == "Banco") print "db="$2 }' conteudo.txt > temp_vars.sh

$ cat temp_vars.sh
db=PostgreSQL, MySQL

$ source temp_vars.sh

$ echo $db
PostgreSQL, MySQL

Tags: awk shell variaveis Integração script

Publicado em 7-15 03:24