Estructuras De Control en AWK

AWK procesa sus entradas línea por linea, aplicando las acciones al patrón si este es verdadero o si aplica.

{ pattern } { actions }

El patrón puede ser tan sencillo o tan complejo como lo podamos hacer, pero una vez encontrada la línea, podemos tener diferentes acciones dependiendo de su valor. Para esto, utilizamos la estructura if.

La declaración de if de awk puede ser de 3 tipos:

Ejemplos, en un log complejo, podemos combinar el patrón básico, con el condicional, if.

control-ex.csv
2008-01-24,mydomain.com,nic@mydomain.com
2008-01-24,07:29:04.7086,07:39:42.0148,129491.280,72320.304,12.13,1,RED
2008-01-24,03:43:12.0558,03:51:21.1126,403411.293,72021.458,32.45,0,GRN
2008-01-24,11:45:32.0033,12:02:37.6765,152728.234,72301.350,12.26,0,RED
2008-01-24,23:08:45.2057,23:39:51.8793,702478.796,70321.028,42.37,0,BLU
2008-01-25,mydomain.com,peter@mydomain.com
2008-01-25,14:20:23.0142,15:17:30.8416,503296.230,70321.058,12.27,1,BLK
2008-01-25,01:29:04.0013,01:29:41.0349,153495.931,72301.301,17.08,0,BLK
2008-01-25,09:21:12.0165,10:02:12.3142,207521.238,70321.018,18.95,1,WHT
2008-01-25,23:29:51.1058,23:39:25.2147,393492.739,72021.300,19.66,0,WHT 

Como se puede ver este log es bastante complejo, lleva dos tipos de líneas con diferente numero de registros por lo que podemos hacer un procesamiento usando ifs.

Para el primer paso, podemos extraer los dominios con un if sencillo:

#!/bin/gawk
# PROGRAMA: control1.awk
# AUTOR: Otto Hahn Herrera
# FECHA: 2020-06-03
# PROPOSITO: Demostrar el uso del if en AWK

BEGIN { FS="," }
{ if (NF == 3) 
    { print $2;
      C = 1 }
    }

Si tenemos que generar una tabla para alimentar una base de datos, lo podemos hacer con un if-else

#!/bin/gawk
# PROGRAMA: control2.awk
# AUTOR: Otto Hahn Herrera
# FECHA: 2020-06-03
# PROPOSITO: Demostrar el uso del if-else en AWK

BEGIN { FS=","; OFS="|"}
{ if (NF == 3) 
    { C = $2 }
  else
    { print C, $1, $2, $6 }
    }

Y si necesitamos transformar esos datos un poco, podemos usar if-else if

#!/bin/gawk
# PROGRAMA: control3.awk
# AUTOR: Otto Hahn Herrera
# FECHA: 2020-06-03
# PROPOSITO: Demostrar el uso del if-else if en AWK

BEGIN { FS=","; OFS="|"}
{ if (NF == 3) 
    { C = $2 }
  else
    { if ($6 <= 15) V = "LOW";
      else if ($6 > 15 && $6 <= 20) V = "MID";
      else V = "HIGH";
    print C, $1, $2, V }
    }