command-line - separador - in awk
Script awk genérico para calcular el promedio en cualquier campo a través del argumento de línea de comando (2)
Quiero escribir un script awk genérico que pueda tomar como entrada un archivo y un número de campo (en ese archivo) y darme el valor promedio de ese campo en ese archivo. Lo usaría algo como esto:
bash$ avg.awk 3 input.file
22
bash$ avg.awk 4 input.file
2001
Por supuesto, puedo escribir el guión si sé qué campo (p. Ej., $ 3) voy a promediar de antemano. Eso sería algo como esto:
//{tot+=$3; count++}
END{
print tot/count;
}
Pero quiero poder cambiar el campo que quiero promediar a través de una opción de línea de comando. ¿Es eso posible? ¡Gracias!
{ tot += $field; count++ }
END { print tot/count }
llamar como awk -v field=3 -f avg.awk input.file
Este hará lo que quieras:
$ cat avg.awk
#!/usr/bin/env awk -f
# Calculate average, syntax: avg.awk field-number file
BEGIN { field = ARGV[1]; ARGV[1] = "" }
{ sum += $field }
END { print sum / NR }
$ cat data
1 5 7
3 6 5
8 4 6
$ avg.awk 1 data
4
$ avg.awk 2 data
5
$ avg.awk 3 data
6