script awk genérico para calcular média em qualquer campo através de linha de comando argumento

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

Pergunta

Eu quero escrever um script awk genérico que pode ter como entrada um arquivo e um número de campo (no arquivo) e me dar o valor médio desse campo no arquivo. Eu usaria algo como isto:

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

É claro, eu posso escrever o script se eu sei que o campo (por exemplo, US $ 3) Vou antemão média. Isso seria algo como isto:

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

Mas eu quero ser capaz de mudar o campo Quero média através de uma opção de linha de comando. Isso é possível? Obrigado!

Foi útil?

Solução

Este irá fazer o que quiser:

$ 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

Outras dicas

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top