La Sentencia next - AWK

La sentencia next fuerza a awk que detenga inmediatamente el procesamiento del registro actual y vaya a leer el siguiente registro. Esto significa que no se ejecutará ninguna regla más para el registro en curso. El resto de las acciones de la regla actual no se ejecutarán.

Contrasta esto con el efecto de la función getline. Eso también hace que awk lea el siguiente registro inmediatamento, pero no se altera el control de flujo del programa. De forma que el resto de la acción actual se ejecuta con un nuevo registro de entrada.

En el nivel más alto, la ejecución de un programa awk es un bucle que lee un registro de entrada y entonces lo chequea contra el patrón de cada regla. Si piensas en este bucle como una sentencia for cuyo cuerpo contiene reglas, entonces la sentencia next es análoga a una sentencia continue: se salta el resto del cuerpo de este bucle implícito, y ejecuta el imcremento (lo que provoca la lecuta de otro registro).

Por ejemplo, si tu programa awk trabaja sólo sobre registros con cuatro campos, y no quieres que procese una entrada incorrecta, podrías usar esta regla cerca del principio del programa:

NF != 4 {
printf("line %d skipped: doesn't have 4 fields", FNR) > "/dev/stderr" next
}

de forma que las reglas siguientes no verán el registro incorrecto. El mensaje de error se redirecciona al streem de salida de error estándar, como debiera ser para los mensajes de error.

La sentencia next no está permitida en una regla BEGIN o END.















Publicar un comentario

0 Comentarios