Como somar uma matriz bash de números (alguns em notação científica)?

4

Como o comando a seguir, usando bc, não funciona para números em notação científica, fiquei pensando sobre uma alternativa, por exemplo, usando o awk?

sum=$( IFS="+"; bc <<< "${arrValues[*]}" )
    
por MaVe 06.11.2013 / 16:59

2 respostas

3
sum=$(
  awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}' "${arrValues[@]}"
)

Com zsh (caso você não tenha para usar bash ), já que ele suporta números de ponto flutuante internamente:

sum=$((${(j[+])arrValues}))

com ksh93 :

Se você precisar do tipo de precisão que o bc fornece, você pode pré-processar os números para que 12e23 seja alterado para (12*10^23) :

sum=$(
  IFS=+
  sed 's/\([0-9.]*\)[eE]\([-+]*[0-9]*\)/(*10^)/g' <<< "${arrValues[*]}" |
    bc -l
)
    
por 06.11.2013 / 17:03
2

Solução de Perl:

perl -MList::Util=sum -l -e 'print sum(@ARGV)' "${array[@]}"
    
por 06.11.2013 / 17:07