sromero separador scripts mayor filtrar contador command-line scripting awk average

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