Búsqueda de sitios web

Cómo utilizar declaraciones de control de flujo en Awk - Parte 12


Cuando revise todos los ejemplos de Awk que hemos cubierto hasta ahora, desde el comienzo de la serie Awk, notará que todos los comandos en los distintos ejemplos se ejecutan secuencialmente, es decir, uno tras otro. Pero en determinadas situaciones, es posible que queramos ejecutar algunas operaciones de filtrado de texto en función de algunas condiciones, ahí es donde se establece el enfoque de las declaraciones de control de flujo.

Hay varias declaraciones de control de flujo en la programación Awk y estas incluyen:

  1. declaración si no
  2. para declaración
  3. mientras declaración
  4. declaración de hacer mientras
  5. declaración de ruptura
  6. continuar declaración
  7. próxima declaración
  8. declaración del siguiente archivo
  9. declaración de salida

Sin embargo, para el alcance de esta serie, explicaremos: if-else, for, while y do while declaraciones. Recuerde que ya explicamos cómo utilizar la siguiente declaración en la Parte 6 de esta serie de Awk.

1. La declaración si-si no

La sintaxis esperada de la declaración if es similar a la de la declaración if del shell:

if  (condition1) {
     actions1
}
else {
      actions2
}

En la sintaxis anterior, condición1 y condición2 son expresiones Awk, y actions1 y actions2 son comandos Awk ejecutados cuando el se cumplen las condiciones respectivas.

Cuando se cumple la condición1, lo que significa que es verdadera, entonces se ejecuta acciones1 y la declaración if sale; de lo contrario, se ejecuta acciones2. ejecutado.

La declaración if también se puede expandir a una declaración if-else_if-else como se muestra a continuación:

if (condition1){
     actions1
}
else if (conditions2){
      actions2
}
else{
     actions3
}

Para el formulario anterior, si la condición1 es verdadera, entonces se ejecuta acciones1 y la declaración if sale; de lo contrario, condición2 se evalúa y si es verdadero, entonces se ejecuta acciones2 y la declaración if sale. Sin embargo, cuando la condición2 es falsa, se ejecuta acciones3 y la declaración if sale.

Aquí hay un ejemplo del uso de declaraciones if, tenemos una lista de usuarios y sus edades almacenadas en el archivo, usuarios .txt.

Queremos imprimir una declaración que indique el nombre de un usuario y si la edad del usuario es menor o mayor que 25 años.

aaronkilik@tecMint ~ $ cat users.txt
Sarah L			35    	F
Aaron Kili		40    	M
John  Doo		20    	M
Kili  Seth		49    	M    

Podemos escribir un breve script de shell para llevar a cabo nuestro trabajo anterior, aquí está el contenido del script:


#!/bin/bash
awk ' { 
        if ( $3 <= 25 ){
           print "User",$1,$2,"is less than 25 years old." ;
        }
        else {
           print "User",$1,$2,"is more than 25 years old" ; 
}
}'    ~/users.txt

Luego guarde el archivo y salga, haga ejecutable el script y ejecútelo de la siguiente manera:

chmod +x test.sh
./test.sh
Salida de muestra
User Sarah L is more than 25 years old
User Aaron Kili is more than 25 years old
User John Doo is less than 25 years old.
User Kili Seth is more than 25 years old

2. La declaración para

En caso de que desee ejecutar algunos comandos Awk en un bucle, entonces la declaración for le ofrece una forma adecuada de hacerlo, con la siguiente sintaxis:

Aquí, el enfoque se define simplemente mediante el uso de un contador para controlar la ejecución del bucle, primero debe inicializar el contador, luego ejecutarlo contra una condición de prueba, si es verdadera, ejecutar las acciones y finalmente incrementar el contador. El ciclo termina cuando el contador no cumple la condición.

for ( counter-initialization; test-condition; counter-increment ){
      actions
}

El siguiente comando Awk muestra cómo funciona la sentencia for, donde queremos imprimir los números 0-10:

awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
Salida de muestra
0
1
2
3
4
5
6
7
8
9
10

3. La declaración while

La sintaxis convencional de la sentencia while es la siguiente:

while ( condition ) {
          actions
}

La condición es una expresión Awk y las acciones son líneas de comandos Awk ejecutadas cuando la condición es verdadera.

A continuación se muestra un script para ilustrar el uso de la instrucción while para imprimir los números 0-10:

#!/bin/bash
awk ' BEGIN{ counter=0 ;
         
        while(counter<=10){
              print counter;
              counter+=1 ;
             
}
}  

Guarde el archivo y haga que el script sea ejecutable, luego ejecútelo:

chmod +x test.sh
./test.sh
Salida de muestra
0
1
2
3
4
5
6
7
8
9
10

4. La declaración "hacer mientras"

Es una modificación de la declaración while anterior, con la siguiente sintaxis subyacente:

do {
     actions
}
 while (condition) 

La ligera diferencia es que, en do while, los comandos Awk se ejecutan antes de que se evalúe la condición. Utilizando el mismo ejemplo de la declaración while anterior, podemos ilustrar el uso de do while alterando el comando Awk en el script test.sh como sigue:

#!/bin/bash

awk ' BEGIN{ counter=0 ;  
        do{
            print counter;  
            counter+=1 ;    
        }
        while (counter<=10)   
} 
'

Después de modificar el script, guarde el archivo y salga. Luego haga que el script sea ejecutable y ejecútelo de la siguiente manera:

chmod +x test.sh
./test.sh
Salida de muestra
0
1
2
3
4
5
6
7
8
9
10

Conclusión

Esta no es una guía completa sobre las declaraciones de control de flujo de Awk, como mencioné anteriormente, hay varias otras declaraciones de control de flujo en Awk.

No obstante, esta parte de la serie Awk debería darle una idea fundamental clara de cómo se puede controlar la ejecución de los comandos Awk en función de ciertas condiciones.

También puede exponer más sobre el resto de las declaraciones de control de flujo para comprender mejor el tema. Finalmente, en la siguiente sección de la serie Awk, pasaremos a escribir guiones de Awk.