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 -MList::Util=sum -l -e 'print sum(@ARGV)' -- "${array[@]}"

또는 임의의 정밀도를 위해:

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

( 0큰 숫자를 사용하여 강제로 합산하는 텍스트를 추가했습니다).

관련 정보