Saltar al contenido

Separador entre sentencias en awk

Tenemos la mejor información que hemos encontrado on line. Esperamos que te sirva de ayuda y si deseas compartir algún detalle que nos pueda ayudar a mejorar hazlo libremente.

¡Muy buena pregunta! creo que el key Es esto: “Por lo tanto, el programa que se muestra al comienzo de esta sección también se podría escribir Por aquí:”

No es obligatorio estar escrito de esta manera. Es una especie de forma alternativa. Esto significa (y se ha demostrado en acción) que las siguientes declaraciones son correctas:

$ awk '/12/  print $0  /21/  print $0 ' file
$ awk '/12/  print $0  ; /21/  print $0 ' file

Creo que este uso de punto y coma es para cubrir un código idiomático muy corto, por ejemplo, casos en los que omitimos la parte de acción y queremos aplicar varias reglas en la misma línea:

$ awk '/12//21/' file
awk: cmd. line:2: /12//21/
awk: cmd. line:2:         ^ unexpected newline or end of string

En este caso, es obligatorio usar un punto y coma para separar las reglas (=condiciones):

$ awk '/12/;/21/' file

Desde el action parte se omite en ambas reglas/ambas condiciones, la acción predeterminada se realizará para cada regla = print $0

En gawk, estas dos citas del manual describen el problema:

Una acción consta de una o más declaraciones awk, encerradas entre llaves (‘…’). Cada declaración especifica una cosa a hacer. Las declaraciones están separadas por líneas nuevas o punto y coma.

Un punto y coma es un “separador“pero no un”terminador“.
El único terminador válido de una acción es una llave de cierre (}).

Por lo tanto, lo que sigue a una llave de cierre de acción (}) debe ser otro patrón acción

en el “hombre maullar” hay alguna otra descripción que puede ayudar a aclarar qué debe hacer awk:

Las declaraciones terminan con saltos de línea, punto y coma o ambos. Los grupos de instrucciones, como acciones o cuerpos de bucle, se bloquean mediante … como en C. La última instrucción de un bloque no necesita un terminador.

El hombre desnudo“lo explica así:

El patrón viene primero, y luego la acción. Las declaraciones de acción están encerradas entre y .

Y, si desea profundizar en los detalles, lea la descripción de POSIX:

action           : '' newline_opt                             ''
                 | '' newline_opt terminated_statement_list   ''
                 | '' newline_opt unterminated_statement_list ''
                 ;

Y busque lo que es una lista de declaraciones “no terminadas”.

O, más simple, busque Acción para leer:

Cualquier declaración individual puede ser reemplazada por una lista de declaraciones encerrada entre llaves. La aplicación garantizará que las declaraciones en una lista de declaraciones estén separadas por o caracteres.

De nuevo: are separated by or characters

El punto y coma entre bloques condicionales parece ser opcional; solo los puntos y comas entre declaraciones dentro los bloques parecen ser obligatorios:

$ echo -e "foonbar" | gawk '/foo/  print "foo found"  /bar/ print "bar found"'
foo found
bar found
$ echo -e "foonbar" | gawk '/foo/  print "foo found" ; /bar/ print "bar found"'
foo found
bar found
$ echo -e "foonbar" | gawk '/foo/  print "foo found"; print "whee" '
foo found
whee
$ echo -e "foonbar" | gawk '/foo/  print "foo found" print "whee" '
gawk: cmd. line:1: /foo/  print "foo found" print "whee" 
gawk: cmd. line:1:                           ^ syntax error

Sin embargo, cuando el bloque de código real entre dos condicionales se omite en favor del predeterminado (es decir, print), el punto y coma se hace necesario:

$ echo -e "foonbar" | gawk '/foo/ /bar/'
gawk: cmd. line:2: /foo/ /bar/
gawk: cmd. line:2:            ^ unexpected newline or end of string
$ echo -e "foonbar" | gawk '/foo/; /bar/'
foo
bar

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *