msoliver
(usa Debian)
Enviado em 27/06/2019 - 17:29h
fabizinha123 escreveu:
Bom dia!!!
Estou querendo fazer um script em awk que leia as posicões do vento ( coluna 9, os valores 210 e 170) e se encontrar direção repetida, quero calcular e média das velocidades (coluna 10, os valores 4, 6 e 7). Essa média por exemplo seria com a direção do 210 que aparece duas vezes, ai a velocidade média seria (4+6)/2. Ai esse script tem que ser para um caso geral onde pode se ter n linhas.
Desde já, muito obrigada!!!
Atenciosamente,
Fabizinha
Boa tarde Fabizinha.
"Parece" que deu certo....
Testei com o seu arquivo de exemplo (03 linhas), e obtive o seguinte resultado:
awk -f AWK_VENTO.awk vento
WWay NWind AVG
210 02 5.000
170 01 7.000
Com o comando abaixo, gerei o arquivo "vento.txt" com 100.000 linhas, para testes.
awk 'BEGIN{for(i=1;i<=100000;i++) printf "%04d %.2f %.2f 2007 07 17 20 50 %03d %.2f %.2f\n" ,i,int(100 * rand()),int(100 * rand()),int(200 * rand()),int(10 * rand()),int(10 * rand()) }' >> vento.txt
cat AWK_VENTO.awk
BEGIN{
printf "WWay\tNWind\tAVG\n";
}
{
wdir[$9]++;count[$9]+=$10;
}
END{
for(var in wdir)
printf "%03d\t%02d\t%.2f\n" ,var,wdir[var],(count[var]/wdir[var]);
}
Gere um arquivo com o conteúdo acima "
AWK_VENTO.awk "
Execute da seguinte forma
awk -f AWK_VENTO.awk seu_arquivo_vento
Se preferir, tudo em uma linha:
awk 'BEGIN{printf "WWay\tNWind\tAVG\n"}{wdir[$9]++;count[$9]+=$10}END{for(var in wdir)printf "%03d\t%02d\t%.2f\n" ,var,wdir[var],(count[var]/wdir[var])}' vento
Importante! Leia => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
É isso!
Att.: Marcelo Oliver