쉘 스크립트 변수 정의에서 부동 소수점 연산 수행

쉘 스크립트 변수 정의에서 부동 소수점 연산 수행

내가 이해한 바로는 bash일부 다른 인터프리터는 정수에 대해서만 산술 연산을 수행합니다. 아래 for루프에서 이 작업을 어떻게 수행할 수 있습니까 ? 사용할 수 있다고 읽었 지만 이 경우 어떻게 사용하는지 bc모르겠습니다 .bc

total=0
for number in `cat /path/to/file`; do
        total=$(($total+$number))
done
average=$(($total/10))
echo Average is $average

문서:

1.143362
1.193994
1.210489
1.210540
1.227611
1.243496
1.260872
1.276752
1.294121
1.427371

답변1

bc아마도 이 목적 으로 사용하고 싶지 않을 것입니다 . 아마도 awk더 좋을 것입니다.

awk '{sum+=$1};END{print sum/NR}' /path/to/file

답변2

신고됨bash4.0의 대안 입니다.초로바~의답변, wc피하고 sed:

bash-4.2$ mapfile -t a < file

bash-4.2$ (IFS='+'; echo "(${a[*]})/${#a[@]}") | bc -l
1.24886080000000000000

답변3

bc부동 소수점 연산 에 일반적으로 사용하는 것 :

file=1.txt
echo '('$(<$file)')/'$(wc -l < $file) | sed 's/ /+/g' | bc -l

답변4

term=0
file=input
for number in `cat "$file"`; do
        term="${term}+${number}"
done
total="$(echo "$term" | bc -l)"
average="$(echo "${total}/10" | bc -l)"
average="$(echo "$average" | sed -e 's/^\(.*\..*[^0]\)0*/\1/' -e p)"
echo "Total: ${total}"
echo "Average: ${average}"

관련 정보