bash数値配列を合計する方法(一部は科学的表記法で表されます)?

bash数値配列を合計する方法(一部は科学的表記法で表されます)?

bcを使用した後のコマンドは科学表記の数には機能しないので、awkを使用するなどの代替手段があるかどうか疑問に思います。

sum=$( IFS="+"; bc <<< "${arrValues[*]}" )

答え1

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
)

答え2

Perlソリューション:

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

または任意の精度のために:

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

0大きな数字を使用して強制的に合計するテキストを追加しました)。

関連情報