2016-12-22 2 views
1

J'ai ce fichier texte:Exponentielle avec bash, awk ou similaire

$ cat resultados.txt 
10.8 
12.1 
14.2 
14.8 
19.4 
8.62 
9.73 

Important: chiffres sont en lignes, et non dans les colonnes.

Je veux effectuer l'opération géométrique:

e((l(number1)+l(number2)+l(numbern))/n) 

Comment puis-je faire cela?

Répondre

1

est ici une autre alternative pour la moyenne géométrique

$ awk 'BEGIN{p=1} {p*=$0; n++} END{print p^(1/n)}' file 
12.3846 

ou, avec NR

$ awk 'BEGIN{p=1} {p*=$0} END{print p^(1/NR)}' file 
+0

merci beaucoup !!. Fonctionne parfaitement. – artion

+0

Pour un grand nombre d'éléments, vous pouvez utiliser la solution exp (sum log/n). – karakfa

1

Votre question serait plus claire si vous fournissiez la sortie attendue étant donné cette entrée, mais est-ce ce que vous cherchez?

$ awk '{sum+=log($0)} END{if (NR) print sum, sum/NR, exp(sum/NR)}' file 
17.6152 2.51646 12.3846