Búsqueda de sitios web

Aprenda a utilizar variables Awk, expresiones numéricas y 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 debe dominar para poder realizar algunos filtrados básicos de texto o cadenas en Linux.

A partir de esta parte, nos sumergiremos en áreas avanzadas de Awk para manejar operaciones de filtrado de cadenas o texto más complejas. Por lo tanto, cubriremos 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 anteriores como 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 del comando Awk más fáciles de entender, así que siéntate y comencemos.

1. Variables extrañas

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 un espacio en la memoria que almacenará el valor que especifique para la variable.

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

variable_name=value 

En la sintaxis anterior:

  1. nombre_variable: es el nombre que le das a una variable
  2. value: el valor almacenado en la variable

Veamos algunos ejemplos a continuación:

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

Eche un vistazo a los ejemplos simples anteriores, en la primera definición de variable, el valor linux-console.net 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 recuerdas, 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 a campos 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 segundo_nombre se establece en el tercer campo.

A modo de ilustración, considere un archivo llamado names.txt que contiene una lista de los usuarios de una aplicación indicando su nombre y apellido, además del sexo. 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 Awk . comando 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 ejecuta el comando uname -a en su terminal, imprime toda la información de su sistema.

El segundo campo contiene su hostname, por lo tanto podemos almacenar el hostname en una variable llamada hostname 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 expresiones numéricas es:

operand1 operator operand2

En el formulario anterior, operand1 y operand2 pueden ser números o nombres de variables, 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, con el archivo domains.txt que contiene todos los dominios propiedad de Tecmint. fuerte>.

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 ver el contenido del archivo, use el siguiente comando:

cat domains.txt

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

#!/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

Después de crear el script, guardarlo y hacerlo ejecutable, cuando lo ejecutamos con el archivo domains.txt como entrada, obtenemos el siguiente resultado:

./script.sh  ~/domains.txt

Según la salida del script, hay 6 líneas en el archivo domains.txt que contiene linux-console.net, 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 los siguientes:

  1. *=: operador de asignación de multiplicación
  2. +=: operador de asignación de suma
  3. /=: operador de asignación de división
  4. -=: operador de asignación de resta
  5. %=: operador de asignación de módulo
  6. ^=: 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 alterar el comando Awk en el script de shell que acabamos de escribir arriba usando el operador de asignación += de la siguiente manera:

#!/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

En este segmento de la serie Awk, cubrimos algunas características poderosas de Awk, es decir, variables, creación de expresiones numéricas y 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, es decir, patrones especiales: BEGIN y END. Hasta entonces, mantente conectado con Tecmint.