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
큰 숫자를 사용하여 강제로 합산하는 텍스트를 추가했습니다).