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


Cuando revise todos los ejemplos de Awk que hemos cubierto hasta el momento, justo desde el inicio de la serie de Awk, notará que todos los comandos en los diversos ejemplos se ejecutan de forma secuencial, uno tras otro. Pero en ciertas situaciones, podemos querer ejecutar algunas operaciones de filtrado de texto basadas en algunas condiciones, que 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 éstas incluyen:

  1. if-else statement
  2. for statement
  3. while statement
  4. do-while statement
  5. break statement
  6. continue statement
  7. next statement
  8. nextfile statement
  9. exit statement

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

1. La declaración if-else

La sintaxis esperada del if statement es similar a la del shell if statement :

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 Se cumplen las condiciones respectivas.

Cuando condition1 se cumple, lo que significa que es verdad, entonces actions1 se ejecuta y if enunciado sale, de lo contrario actions2 es ejecutado.

La declaración if también puede expandirse 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 condición1 es verdadera, entonces acciones1 se ejecuta y si la declaración sale, de lo contrario, condición2 se evalúa y, si es verdadero, se ejecuta actions2 y se cierra if statement . Sin embargo, cuando condición2 es falsa, se ejecuta actions3 y se cierra la if declaración .

Este es un ejemplo de cómo usar if sentencias , tenemos una lista de usuarios y sus edades almacenados en el archivo, usuarios .txt .

Queremos imprimir una declaración que indique el nombre de un usuario y si su edad es menor o mayor que 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 script de shell corto 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 el script 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 de

En caso de que desee ejecutar algunos comandos Awk en un bucle, entonces for statement 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 necesita inicializar el contador, luego ejecutarlo contra una condición de prueba, si es verdadero, ejecutar las acciones y finalmente incrementar el contador. El bucle 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 para la declaración , donde queremos imprimir los números 0-10 :

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

3. La sentencia while

La sintaxis convencional de la declaració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 incluye un script para ilustrar el uso de while statement 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 el script 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, bajo do while , los comandos Awk se ejecutan antes de evaluar la condición. Usando el ejemplo en while anterior, podemos ilustrar el uso de do while al modificar el comando Awk en el script test.sh 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 el script 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 sobre las declaraciones de control de flujo de Awk, como mencioné anteriormente, hay otras declaraciones de control de flujo en Awk.

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

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