regulares expresiones regex awk syntactic-sugar

regex - expresiones regulares bash



AWK: acortado if-then-else con regex (3)

No tan corto:

/REGEX/ {Action-if-matches} ! /REGEX/ {Action-if-does-not-match}

Pero (g) awk también es compatible con el operador ternario:

{ /REGEX/ ? matching=1 : matching = 0 ; if ( matching ==1 ) { matching_action } else { notmatching_action } }

ACTUALIZACIÓN :

De acuerdo con el gran Glenn Jackman, puedes asignar variables en el partido como:

m = /REGEX/ { matching-action } !m { NOT-matching-action }

El siguiente formato AWK:

/REGEX/ {Action}

Ejecutará Action si la línea actual coincide con REGEX .

¿Hay alguna manera de agregar una cláusula else , que se ejecutará si la línea actual no coincide con la expresión regular, sin usar explícitamente if-then-else, algo como:

/REGEX/ {Action-if-matches} {Action-if-does-not-match}


Puedes hacer un "truco". Como saben, AWK intenta hacer coincidir la entrada con cada expresión regular para ejecutar su bloque.

Este código ejecuta el segundo bloque si $ 1 es "1", de lo contrario ejecuta el tercer bloque:

awk ''{used = 0} $1 == 1 {print $1" is 1 !!"; used = 1;} used == 0 {print $1" is not 1 !!";}''

Si la entrada es:

1 2

Se imprime:

1 is 1 !! 2 is not 1 !!


También está el next :

/REGEX/ { Action next # skip to the next line } { will only get here if the current line does *not* match /REGEX/ }