Filtrado De Registros en AWK
AWK es una herramienta muy poderosa y un potente lenguaje de programación con un modelo de datos muy interesante, en el cual se opera sobre archivos y estos archivos son consumidos línea por línea.
Nosotros utilizamos AWK principalmente para extraer columnas, reacomodarlas, o filtrarlas.
Para filtrar filas en AWK lo que necesitamos es comparar con un if
Los operadores lógicos en AWK son:
>
: mayor que<
: menor que>=
: mayor o igual<=
: menor o igual==
: igual!=
: diferente~ /regex/
: igual al patrón!~ /regex/
: diferente al patrón&&
: AND||
: OR!
: NOT
Entonces podemos hacer comparaciones con una o mas columnas con ifs:
file1.csv
col1,col2,col3,col4
1,1,B,0.1594
0,2,B,1.0264
1,3,Q,2.3340
1,4,B,1.2225
0,5,B,0.5864
0,6,Q,3.1459
0,7,Q,0.6587
1,8,C,0.2155
1,9,B,0.8465
0,10,Q,1.5573
0,11,C,0.5942
1,12,Q,4.0000
0,13,B,0.0001
1,14,C,0.2245
1,15,B,3.3315
0,16,Q,2.1854
0,17,B,1.9874
Para filtrar todas las filas con col1 = 0
#!/bin/awk -f
BEGIN {FS=","; OFS=","} # Begin section
{if ($1 == 0) print } # Loop section
END {} # End section
El resultado es:
0,2,B,1.0264
0,5,B,0.5864
0,6,Q,3.1459
0,7,Q,0.6587
0,10,Q,1.5573
0,11,C,0.5942
0,13,B,0.0001
0,16,Q,2.1854
0,17,B,1.9874
Para hacer un filtrado en 2 columnas una numérica y otra de caracteres:
#!/bin/awk -f
BEGIN {FS=","; OFS=","} # Begin section
{if (($1 == 0) && ($3 ~ /Q/)) print } # Loop section
END {} # End section
Y el resultado es:
0,6,Q,3.1459
0,7,Q,0.6587
0,10,Q,1.5573
0,16,Q,2.1854
Es importante notar que si tenemos condiciones diferentes podemos ir añadiendo filtros, cada uno dentro de diferentes llaves, los filtros van a ir funcionando de manera secuencial..