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


Cuando revisa todos los ejemplos de Awk que hemos cubierto hasta ahora, desde el comienzo de las 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 de Awk y estas incluyen:

  1. declaración if-else
  2. para la declaración
  3. declaración while
  4. declaración do-while
  5. declaración de ruptura
  6. continuar declaración
  7. siguiente declaración
  8. instrucción nextfile
  9. declaración de salida

Sin embargo, para el alcance de esta serie, expondremos sobre: if-else , for , while y do while declaraciones. Recuerda que ya recorrimos la serie Awk.

1. La declaración if-else

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

if  (condition1) {
     actions1
}
else {
      actions2
}

En la sintaxis anterior, condition1 y condition2 son expresiones Awk, y actions1 y actions2 son comandos Awk que se ejecutan cuando el se cumplen las condiciones respectivas.

Cuando se satisface la condición1, lo que significa que es verdadera, se ejecuta actions1 y la sentencia if sale; de lo contrario, se ejecuta actions2.

La instrucción if también se puede expandir a una instrucció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 condition1 es verdadera, entonces actions1 se ejecuta y la sentencia if sale; de lo contrario, condition2 se evalúa y, si es verdadera, se ejecuta actions2 y sale la sentencia if. Sin embargo, cuando condition2 es falsa, las acciones3 se ejecutan y la sentencia if sale.

Aquí hay un caso de uso de declaraciones if, tenemos una lista de usuarios y sus edades almacenada en el archivo, users.txt.

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

[email protected] ~ $ 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 realizar 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 que el script sea ejecutable y ejecútelo de la siguiente manera:

$ chmod +x test.sh
$ ./test.sh
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 for

En caso de que desee ejecutar algunos comandos Awk en un bucle, la instrucció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 ciclo, 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 satisface la condición.

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

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

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

3. La declaración while

La sintaxis convencional de la instrucción while es la siguiente:

while ( condition ) {
          actions
}

La condición es una expresión Awk y las acciones son líneas de comandos Awk que se ejecutan 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 del 0 al 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
0
1
2
3
4
5
6
7
8
9
10

4. La declaración do while

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

do {
     actions
}
 while (condition) 

La pequeña diferencia es que, en do while, los comandos Awk se ejecutan antes de que se evalúe la condición. Usando el ejemplo de la declaración while anterior, podemos ilustrar el uso de do while alterando el comando Awk en el script test.sh de la siguiente manera:

#!/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
0
1
2
3
4
5
6
7
8
9
10

Conclusión

Esta no es una guía completa con respecto a 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 Awk.