シェルスクリプト変数定義で浮動小数点演算を実行する

シェルスクリプト変数定義で浮動小数点演算を実行する

私が理解したところ、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}"

関連情報