Script genérico awk para calcular el promedio en cualquier campo a través del argumento de línea de comando

StackOverflow https://stackoverflow.com/questions/1434016

Pregunta

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 de esta manera:

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 (por ejemplo, $ 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!

¿Fue útil?

Solución

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

Otros consejos

{ tot += $field; count++ }
END { print tot/count }

llamar como awk -v field = 3 -f avg.awk input.file

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top