Pesquisa de site

Trabalhe com variáveis, expressões e operadores Awk


A série de comandos Awk está ficando emocionante! Acredito que, nas sete partes anteriores, abordamos alguns fundamentos do Awk que você precisa dominar para poder realizar filtragem básica de texto ou string no Linux.

Começando com esta parte, mergulharemos nas áreas avançadas do Awk para lidar com operações mais complexas de filtragem de texto ou string. Portanto, abordaremos recursos do Awk como variáveis, expressões numéricas e operadores de atribuição.

Esses conceitos não são significativamente diferentes daqueles que você pode ter encontrado em muitas linguagens de programação anteriores, como Shell, C, Python e muitas outras. Portanto, não há necessidade de se preocupar muito com esse assunto; estamos simplesmente revisando as ideias comuns de uso desses recursos.

Esta será provavelmente uma das seções de comando do Awk mais fáceis de entender, então relaxe e vamos em frente

1. Variáveis awk

Em qualquer linguagem de programação, uma variável é um espaço reservado que armazena um valor. Quando você cria uma variável em um arquivo de programa, à medida que o arquivo é executado, algum espaço é criado na memória que armazenará o valor que você especificar para a variável.

Você pode definir variáveis Awk da mesma forma que define variáveis de shell, como segue:

variable_name=value 

Na sintaxe acima:

  • variable_name: é o nome que você dá a uma variável.
  • valor: o valor armazenado na variável.

Vejamos alguns exemplos abaixo:

computer_name=”linux-console.net”
port_no=”22”
email=”[email ”
server=”computer_name”

Dê uma olhada nos exemplos simples acima, na primeira definição da variável, o valor linux-console.net é atribuído à variável computer_name.

Além disso, o valor 22 é atribuído à variável port_no, também é possível atribuir o valor de uma variável a outra variável como no último exemplo onde atribuímos o valor de computer_name para a variável server.

Se você se lembra, desde a parte 2 desta série do Awk, onde abordamos a edição de campos, falamos sobre como o Awk divide as linhas de entrada em campos e usa um operador de acesso de campo padrão, $ para ler os diferentes campos que foram analisados. Também podemos usar variáveis para armazenar os valores dos campos da seguinte maneira.

first_name=$2
second_name=$3

Nos exemplos acima, o valor de first_name é definido para o segundo campo e second_name é definido para o terceiro campo.

Como ilustração, considere um arquivo chamado names.txt que contém uma lista de usuários indicando seu nome e sobrenome, além de gênero.

Usando o comando cat, podemos visualizar o conteúdo do arquivo da seguinte forma

cat names.txt

Então, também podemos usar as variáveis first_name e second_name para armazenar o primeiro e segundo nomes do primeiro usuário da lista, executando o Awk comando abaixo:

awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt

Vejamos também outro caso, quando você emite o comando uname -a em seu terminal, ele imprime todas as informações do seu sistema.

O segundo campo contém seu hostname, portanto podemos armazenar o hostname em uma variável chamada hostname e imprimi-lo usando Awk > da seguinte forma:

uname -a
uname -a | awk '{hostname=$2 ; print hostname ; }' 

2. Expressões Numéricas

No Awk, expressões numéricas são construídas usando os seguintes operadores numéricos:

  • * : operador de multiplicação
  • + : operador de adição
  • / : operador de divisão
  • - : operador de subtração
  • % : operador de módulo
  • ^ : operador de exponenciação

A sintaxe para uma expressão numérica é:

operand1 operator operand2

No formulário acima, operand1 e operand2 podem ser números ou nomes de variáveis, e operator é qualquer um dos operadores acima.

Abaixo estão alguns exemplos para demonstrar como construir expressões numéricas:

counter=0
num1=5
num2=10
num3=num2-num1
counter=counter+1

Para entender o uso de expressões numéricas no Awk, consideraremos o seguinte exemplo abaixo, com o arquivo domains.txt que contém todos os domínios de propriedade da Tecmint.

news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net

Para visualizar o conteúdo do arquivo, use o comando abaixo:

cat domains.txt

Se quisermos contar quantas vezes o domínio linux-console.net aparece no arquivo, podemos escrever um script simples para fazer isso da seguinte forma:

#!/bin/bash
for file in $@; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { counter=counter+1 ; printf "%s\n", counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

Após criar o script, salve-o e torne-o executável, quando o executamos com o arquivo domains.txt como entrada, obtemos a seguinte saída:

./script.sh  ~/domains.txt

Na saída do script, há 6 linhas no arquivo domains.txt que contém linux-console.net, para confirmar que você pode contá-las manualmente.

3. Operadores de Atribuição

O último recurso do Awk que abordaremos são os operadores de atribuição. Existem vários operadores de atribuição no Awk e estes incluem o seguinte:

  • *= : operador de atribuição de multiplicação
  • += : operador de atribuição de adição
  • /= : operador de atribuição de divisão
  • -= : operador de atribuição de subtração
  • %= : operador de atribuição de módulo
  • ^= : operador de atribuição de exponenciação

A sintaxe mais simples de uma operação de atribuição no Awk é a seguinte:

variable_name=variable_name operator operand

Exemplos:

counter=0
counter=counter+1

num=20
num=num-1

Você pode usar os operadores de atribuição acima para encurtar as operações de atribuição no Awk, considere os exemplos anteriores, poderíamos realizar a atribuição da seguinte forma:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Portanto, podemos alterar o comando Awk no shell script que acabamos de escrever acima usando o operador de atribuição += da seguinte maneira:

#!/bin/bash
for file in $@; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { counter+=1 ; printf  "%s\n",  counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

Neste segmento da série de comandos do Awk, cobrimos alguns recursos poderosos do Awk, ou seja, variáveis, construção de expressões numéricas e uso de operadores de atribuição, além de algumas ilustrações de como podemos realmente usá-los.

Esses conceitos não são diferentes daqueles de outras linguagens de programação, mas pode haver algumas distinções significativas na programação Awk.

Na parte 9, veremos mais recursos do Awk que são padrões especiais: BEGIN e END. Até lá, fique conectado ao Tecmint.

Para aqueles que procuram um recurso abrangente, compilamos todos os artigos da série Awk em um livro, que inclui 13 capítulos e abrange 41 páginas, cobrindo o uso básico e avançado do Awk com exemplos práticos.

Product Name Price Buy
eBook: Introducing the Awk Getting Started Guide for Beginners $8.99 [Buy Now]