Script générique awk pour calculer la moyenne sur n'importe quel champ via un argument de ligne de commande

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

Question

Je veux écrire un script générique awk qui peut prendre en entrée un fichier et un numéro de champ (dans ce fichier) et me donner la valeur moyenne de ce champ dans ce fichier. Je voudrais l'utiliser quelque chose comme ça:

bash$ avg.awk 3 input.file
22
bash$ avg.awk 4 input.file
2001

Bien sûr, je peux écrire le script si je connais le champ (3 $, par exemple) que je vais calculer en moyenne à l’avance. Ce serait quelque chose comme ça:

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

Mais je veux pouvoir changer le champ que je veux moyenner via une option en ligne de commande. Est-ce possible? Merci!

Était-ce utile?

La solution

Celui-ci fera ce que vous voulez:

$ 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

Autres conseils

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

appeler comme awk -v field = 3 -f avg.awk input.file

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top