Bash
如何對一個 bash 數字數組求和(一些以科學記數法表示)?
由於以下使用 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[@]}"