Este artículo es parte de la serie de ejemplos de tutoriales de Awk en curso. En nuestros artículos anteriores sobre awk, discutimos sobre awk print, variables definidas por el usuario de awk, variables incorporadas de awk, operadores de awk y declaraciones condicionales de awk.
En este artículo, repasemos sobre awk loop declaraciones – while, do while, bucles for , romper, continuar y salir junto con 7 ejemplos prácticos.
Las declaraciones de bucle Awk se utilizan para realizar un conjunto de acciones una y otra vez en sucesión. Ejecuta repetidamente una declaración siempre que la condición sea verdadera. Awk tiene una cantidad de declaraciones en bucle como un lenguaje de programación 'C'.
Awk Mientras Bucle
Syntax: while(condition) actions
- while es una palabra clave.
- la condición es una expresión condicional
- las acciones son el cuerpo del ciclo while que puede tener una o más declaraciones. Si las acciones tienen más de una declaración, debe encerrarse entre llaves.
¿Cómo funciona? — Qué raro mientras loop primero verifica la condición, si la condición es verdadera, luego ejecuta la lista de acciones. Una vez que se ha completado la ejecución de la acción, la condición se verifica nuevamente y, si es verdadera, las acciones se realizan nuevamente. Este proceso se repite hasta que la condición se vuelve falsa. Si la condición devuelve falso en la primera iteración, las acciones nunca se ejecutan.
1. Ejemplo de Awk While Loop:crea una cadena de una longitud específica
$awk 'BEGIN { while (count++<50) string=string "x"; print string }' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
El ejemplo anterior usa el bloque especial 'BEGIN { }' que se ejecuta antes que cualquier otra cosa en un programa Awk. En este bloque, awk while loop agrega el carácter 'x' a la variable 'cadena' 50 veces. count es una variable que se incrementa y se comprueba que es inferior a 50. Por lo tanto, después de 50 iteraciones, esta condición se vuelve falsa. Como este programa Awk no tiene cuerpo, se cierra después de ejecutar el bloque BEGIN.
Bucle Do-While Awk
¿Cómo funciona? – Awk Do mientras loop se denomina bucle controlado por salida, mientras que awk while loop se denomina bucle controlado por entrada. Porque while loop primero verifica la condición, luego decide ejecutar el cuerpo o no. Pero el awk do while loop ejecuta el cuerpo una vez, luego repite el cuerpo mientras la condición sea verdadera.
Syntax: do action while(condition)
Incluso si la condición es falsa, al principio la acción se realiza al menos una vez.
2. Awk Do While Loop Ejemplo:Imprime el mensaje al menos una vez
$ awk 'BEGIN{ count=1; do print "This gets printed at least once"; while(count!=1) }' This gets printed at least once
En el script anterior, la declaración de impresión, ejecutada al menos una vez, si usa la declaración while, primero se verificará la condición después de que el conteo se inicialice a 1, en la primera iteración, la condición será falsa, por lo que la declaración de impresión no t se ejecuta, pero en do while se ejecutará el primer cuerpo, por lo que ejecuta la declaración de impresión.
Declaración de bucle For de Awk
Awk por La instrucción es la misma que awk while loop, pero su sintaxis es mucho más fácil de usar.
Syntax: for(initialization;condition;increment/decrement) actions
¿Cómo funciona? — Awk por La declaración comienza ejecutando la inicialización, luego verifica la condición, si la condición es verdadera, ejecuta las acciones, luego incrementa o decrementa. Luego, mientras la condición sea verdadera, ejecuta repetidamente la acción y luego incrementa/decrementa.
3. Awk For Ejemplo de bucle. Imprime la suma de campos en todas las líneas.
$ awk '{ for (i = 1; i <= NF; i++) total = total+$i }; END { print total }' 12 23 34 45 56 34 56 23 45 23 351
Inicialmente, la variable i se inicializa a 1, luego verifica si i es menor o igual al número total de campos, luego continúa agregando todos los campos y finalmente la suma se almacena en la variable total. En el bloque END simplemente imprima el total variable.
4. Ejemplo de Awk For Loop:Imprime los campos en orden inverso en cada línea.
$ awk 'BEGIN{ORS="";}{ for (i=NF; i>0; i--) print $i," "; print "\n"; }' student-marks 77 84 78 2143 Jones 45 58 56 2321 Gondrol 37 38 2122 RinRao 95 97 87 2537 Edwin 47 30 2415 Dayan
Hablamos sobre la variable integrada awk NF en nuestro artículo anterior. Después de procesar cada línea, Awk establece la variable NF en la cantidad de campos que se encuentran en esa línea.
El script anterior, se repite en orden inverso comenzando desde NF a 1 y genera los campos uno por uno. Comienza con el campo $NF, luego $(NF-1),…, $1. Después de eso, imprime un carácter de nueva línea.
Ahora veamos algunas otras declaraciones que se pueden usar con la declaración de bucle.
Declaración Awk Break
La instrucción Break se usa para salir del bucle más interno (while, do-while y for loop) que lo encierra.
5. Ejemplo de Awk Break:Awk Script para pasar por solo 10 iteraciones
$ awk 'BEGIN{while(1) print "forever"}'
El ciclo while awk anterior imprime la cadena "para siempre" para siempre, porque la condición nunca falla. Ahora, si desea detener el ciclo después de las primeras 10 iteraciones, consulte el siguiente script.
$ awk 'BEGIN{ x=1; while(1) { print "Iteration"; if ( x==10 ) break; x++; }}' Iteration Iteration Iteration Iteration Iteration Iteration Iteration Iteration Iteration Iteration
En la secuencia de comandos anterior, verifica el valor de la variable "x", si llega a 10, simplemente salta del ciclo usando la instrucción break.
Declaración de continuación de Awk
La instrucción Continuar salta sobre el resto del cuerpo del ciclo, lo que hace que el próximo ciclo alrededor del ciclo comience de inmediato.
6. Ejemplo de continuación de Awk:Ejecutar el ciclo excepto la quinta iteración
$ awk 'BEGIN{ x=1; while(x<=10) { if(x==5){ x++; continue; } print "Value of x",x;x++; } }' Value of x 1 Value of x 2 Value of x 3 Value of x 4 Value of x 6 Value of x 7 Value of x 8 Value of x 9 Value of x 10
En el script anterior, imprime el valor de x, en cada iteración, pero si el valor de x llega a 5, simplemente incrementa el valor de x, luego continúa con la siguiente iteración, no ejecutará el resto del cuerpo del bucle, por lo que el valor de x no se imprime para el valor 5. La declaración de continuación tiene el significado solo si usa con en el ciclo.
Declaración de salida de Awk
La declaración de salida hace que el script deje de ejecutar inmediatamente la entrada actual y deje de procesar la entrada; todas las entradas restantes se ignoran.
Exit acepta cualquier número entero como argumento, que será el código de estado de salida para el proceso awk. Si no se proporciona ningún argumento, exit devuelve el estado cero.
7. Ejemplo de salida de Awk:Salir del bucle en la quinta iteración
$ awk 'BEGIN{ x=1; while(x<=10) { if(x==5){ exit;} print "Value of x",x;x++; } }' Value of x 1 Value of x 2 Value of x 3 Value of x 4
En el script anterior, una vez que el valor de x llega a 5, llama a exit, lo que detiene la ejecución del proceso awk. Entonces el valor de x se imprime solo hasta 4, una vez que llega a 5 sale.
Lecturas recomendadas