Aprenda a usar las variables Awk, las expresiones numéricas y los operadores de asignación - Parte 8


Creo que la serie de comandos Awk se está volviendo emocionante, en las siete partes anteriores, analizamos algunos fundamentos de Awk que debes dominar para poder realizar un filtrado básico de texto o cadenas en Linux.

Comenzando con esta parte, nos sumergiremos en áreas avanzadas de Awk para manejar operaciones más complejas de filtrado de texto o cadenas. Por lo tanto, vamos a cubrir las características de Awk como variables, expresiones numéricas y operadores de asignación.

Estos conceptos no son completamente distintos de los que probablemente haya encontrado en muchos lenguajes de programación antes de shell, C, Python y muchos otros, por lo que no hay necesidad de preocuparse mucho por este tema, simplemente estamos revisando las ideas comunes de uso estas características mencionadas.

Esta será probablemente una de las secciones de comandos Awk más fáciles de entender, así que siéntese y pongámonos en marcha.

1. Variables Awk

En cualquier lenguaje de programación, una variable es un marcador de posición que almacena un valor, cuando crea una variable en un archivo de programa, a medida que se ejecuta el archivo, se crea algo de espacio en la memoria que almacenará el valor que especifique para la variable.

Puede definir las variables Awk de la misma manera que define las variables de shell de la siguiente manera:

variable_name=value 

En la sintaxis anterior:

  1. variable_name : es el nombre que le da a una variable
  2. valor : el valor almacenado en la variable

Veamos algunos ejemplos a continuación:

computer_name=”tecmint.com”
port_no=”22”
email=”[email protected]”
server=”computer_name”

Eche un vistazo a los ejemplos simples anteriores, en la primera definición de variable, el valor tecmint.com se asigna a la variable computer_name .

Además, el valor 22 se asigna a la variable port_no , también es posible asignar el valor de una variable a otra variable como en el último ejemplo donde asignamos el valor de computer_name al servidor de variables.

Si puede recordar, desde la parte 2 de esta serie de Awk, donde cubrimos la edición de campos, hablamos sobre cómo Awk divide las líneas de entrada en campos y usa el operador de acceso de campo estándar, $ para leer los diferentes campos que han sido analizados. También podemos usar variables para almacenar los valores de los campos de la siguiente manera.

first_name=$2
second_name=$3

En los ejemplos anteriores, el valor de first_name se establece en el segundo campo y second_name se establece en el tercer campo.

Como ilustración, considere un archivo llamado names.txt que contiene una lista de los usuarios de una aplicación que indica su nombre y apellido más el género. Usando el comando cat, podemos ver el contenido del archivo de la siguiente manera:

$ cat names.txt

Luego, también podemos usar las variables first_name y second_name para almacenar el primer y segundo nombre del primer usuario en la lista ejecutando el comando Awk a continuación:

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

Echemos también un vistazo a otro caso, cuando emite el comando uname -a en su terminal, imprime toda la información de su sistema.

El segundo campo contiene su nombre de host , por lo tanto, podemos almacenar el nombre de host en una variable llamada nombre de host e imprimirlo usando Awk de la siguiente manera:

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

2. Expresiones numéricas

En Awk, las expresiones numéricas se crean utilizando los siguientes operadores numéricos:

  1. * : operador de multiplicación
  2. + : operador de suma
  3. /: operador de división
  4. - : operador de resta
  5. % : operador de módulo
  6. ^: operador de exponenciación

La sintaxis de una expresión numérica es:

$ operand1 operator operand2

En el formulario anterior, operand1 y operand2 pueden ser números o nombres de variable, y operator es cualquiera de los operadores anteriores.

A continuación, se muestran algunos ejemplos para demostrar cómo crear expresiones numéricas:

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

Para comprender el uso de expresiones numéricas en Awk, consideraremos el siguiente ejemplo a continuación, con el archivo domains.txt que contiene todos los dominios propiedad de Tecmint.

news.tecmint.com
tecmint.com
linuxsay.com
windows.tecmint.com
tecmint.com
news.tecmint.com
tecmint.com
linuxsay.com
tecmint.com
news.tecmint.com
tecmint.com
linuxsay.com
windows.tecmint.com
tecmint.com

Para ver el contenido del archivo, use el siguiente comando:

$ cat domains.txt

Si queremos contar el número de veces que aparece el dominio tecmint.com en el archivo, podemos escribir un script simple para hacerlo de la siguiente manera:

#!/bin/bash
for file in [email protected]; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing tecmint.com 
                awk  '/^tecmint.com/ { 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

Después de crear el script, guárdelo y hágalo ejecutable, cuando lo ejecutamos con el archivo domains.txt como entrada, obtenemos el siguiente resultado:

$ ./script.sh  ~/domains.txt

Desde la salida del script, hay 6 líneas en el archivo domains.txt que contienen tecmint.com , para confirmar que puede contarlas manualmente.

3. Operadores de asignación

La última característica de Awk que cubriremos son los operadores de asignación, hay varios operadores de asignación en Awk y estos incluyen lo siguiente:

  1. * u003d : operador de asignación de multiplicación
  2. + u003d : operador de asignación de suma
  3. /u003d : operador de asignación de división
  4. - u003d : operador de asignación de resta
  5. % u003d : operador de asignación de módulo
  6. ^u003d : operador de asignación de exponenciación

La sintaxis más simple de una operación de asignación en Awk es la siguiente:

$ variable_name=variable_name operator operand

Ejemplos:

counter=0
counter=counter+1

num=20
num=num-1

Puede utilizar los operadores de asignación anteriores para acortar las operaciones de asignación en Awk, considere los ejemplos anteriores, podríamos realizar la asignación de la siguiente forma:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Por lo tanto, podemos modificar el comando Awk en el script de shell que acabamos de escribir usando el operador de asignación + u003d de la siguiente manera:

#!/bin/bash
for file in [email protected]; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing tecmint.com 
                awk  '/^tecmint.com/ { 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

En este segmento de la serie Awk, cubrimos algunas características poderosas de Awk, es decir, las variables, la creación de expresiones numéricas y el uso de operadores de asignación, además de algunas ilustraciones de cómo podemos usarlas realmente.

Estos conceptos no son diferentes de los de otros lenguajes de programación, pero puede haber algunas distinciones significativas en la programación Awk.

En la parte 9, veremos más características de Awk que son patrones especiales: BEGIN y END . Hasta entonces, mantente conectado a Tecmint.