Awk
Versión |
1:3.1.7.dfsg-5 |
Página principal |
http://www.gnu.org/software/gawk/ |
Observaciones |
Empleando la versión GNU de Awk llamada gawk |
Enlaces y referencias
- Ref: Tutorial de AWK
Conceptos
El programa awk trabaja con el siguiente esquema:
Texto de entrada -> Patrones de coincidencia -> Texto de salida y operaciones sobre el texto (código)
Existen dos patrones especiales:
BEGIN
: que fuerza a evaluar su código justo al comienzo de todo el proceso.END
: igual pero evaluándo al final, cuando se han agotado los datos de entrada.
Si no se define ningún patrón de coincidencia de líneas el código a evaluar se lleva a cabo con todas las líneas.
Además de esto, awk efectúa un preproceso con los textos de entrada consistentes en separarlos en registros de datos y éstos, a su vez, divididos en campos.
Variable | Predeterminado | Uso |
---|---|---|
RS | \n | Record Separator o separador de registros, que generalmente suele ser el carácter de salto de línea. |
FS | \s | Field separator o separador de campos. |
Recetario
Sumar una columna de números
Para realizar una suma de los valores numéricos de una columna se puede emplear los siguiente:
$ awk '{ SUM += $1} END { print SUM }' < datos_de_entrada
suponiendo que la cifra sea la primera del archivo.
Si el separador de campos no es un espacio en blanco siempre podemos usar el parámetro -F
para indicar cuál es y seleccionar la columna por número de orden. También nos podemos encontrar con cifras numéricas formateadas según la costumbre local (locale) por lo que es posible que las operaciones aritméticas no funcionen. Para adaptarnos a ello podremos emplear el parámetro --use-lc-numeric
(con precaución ya que no funciona en todas las versiones):
$ cat datos_de_entrada 2010|A| 47|P|0003| 2197,80|25/01/2010|n| 2010|A| 46|P|0003| 854,18|25/01/2010|n| 2010|A| 45|P|0003| 13875,02|25/01/2010|n| 2010|A| 44|P|0003| 662,94|25/01/2010|n| 2010|A| 43|P|0003| 647,50|25/01/2010|n| 2010|A| 42|P|0003| 1298,09|25/01/2010|n| 2010|A| 41|P|0003| 113,04|25/01/2010|n| 2010|A| 40|P|0003| 2229,63|25/01/2010|n| $ awk --use-lc-numeric -F"|" '{ SUM += $6} END { print SUM } ' < datos_de_entrada 21878,2