La Sentencia for - AWK

La sentencia for es más conveniente para contar las iteraciones de un bucle. La forma general de la sentencia for presenta la siguiente forma:

for (inicialización; condición; incremento) cuerpo

Esta sentencia comienza ejecutando inicialización. Después, mientras la condición sea cierta, ejecuta repetidamente el cuerpo y el incremento. Normalmente la inicialización fija el valor de la variable a 0 o 1, incremento añade 1 a dicho valor, y condición compara el nuevo valor contra el número de iteraciones deseado.

Aquí tienes un ejemplo de una sentencia for:

awk '{ for (i = 1; i <= 3; i++)
print $i
}'

Esto imprime los tres primers campos de cada registros de entrada, un campo por línea.

En la sentencia for, el cuerpo está formado por sentencias, pero inicialización, condición e incremento son simples expresiones. No puedes fijar el valor de más de una variable en la parte inicialización a menos que uses una sentencia de asignación múltiple tal como x = y = z = 0, la cual sólo es posible si todos los valores iniciales son el mismo (pero puedes inicializar variables adicionales escribiendo sus asignaciones como sentencias separadas que precedan al bucle for).

Lo mismo se cumple para la parte incremento; para incrementar variables adicionales, debes escribir sentencias separadas al final del bucle. La expresión compuesta C, que usa el separador de C coma, sería útil en este contexto, pero no está soportada por awk.

En la mayoría de los casos, incremento es una expresión incremental, como en el ejemplo de arriba. Pero esto no es obligatorio; podría ser cualquier expresión. Por ejemplo, esta sentencia imprime todas las potencias de 2 entre 1 y 100:

for (i = 1; i <= 100; i *= 2) print i

Cualquiera de las tres expresiones en los paréntesis que siguen al for podría ser omitida si no fuese necesaria. Por lo que, `for (;x > 0;)' es equivalente a `while (x > 0)'. Si la condición se omite, se trata como cierta, dando lugar a un bucle infinito efectivo.

En la mayoría de los casos, un bucle for es una abreviación de un bucle while, tal y como se muestra aquí:

inicialización
while (condición) { cuerpo incremento
}

La única excepción es cuando se utiliza la sentencia continue dentro del bucle; cambiar una sentencia for por una sentencia while de esta forma puede cambiar el efecto de la sentencia continue dentro del bucle.

Existe una versión alternativa del bucle for, para hacer una iteración para cada índice de un array:

for (i in array)
hacer algo con array[i]

El Lenguaje awk tiene una sentencia for además de la sentencia while porque a menudo un bucle for es más fácil para escribirla y más natural para pensarla y entenderla. Contar el número de iteraciones es muy común en los bucles. Es más fácil pensar este conteo como parte del bucle en lugar de cómo algo a hacer dentro del bucle. La siguiente sección tiene ejemplos más complicados de bucles for.





































Publicar un comentario

0 Comentarios