Bash

如何對一個 bash 數字數組求和(一些以科學記數法表示)?

  • November 6, 2013

由於以下使用 bc 的命令不適用於科學計數法中的數字,我想知道一個替代方法,例如使用 awk?

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

使用 zsh (以防您不必使用),因為它在bash內部支持浮點數:

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

ksh93

如果您需要提供的那種精度bc,您可以對數字進行預處理,以便將12e23其更改為(12*10^23)

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

Perl 解決方案:

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

引用自:https://unix.stackexchange.com/questions/99092