Передача значений массива bash в bc
У меня есть массив чисел с плавающей запятой, скажем, это называется vals
и инициализирован, как это -
# load data from the datafile.txt
vals=`cat datafile.txt`
vals=($vals)
datafile.txt
выглядит так -
0.012256791324227446
0.012424287090558156
0.013912725724889032
0.014678182257134693
Теперь мне нужно вычислить среднее значение элементов 1 и 2 в vals
используя bc, я делаю следующее:
result=$(echo "(${vals[1]} + ${vals[2]})/2.0" | bc)
echo result: $result
но result
всегда 0
обратите внимание, что элементы не 0.0
,
любая идея?
РЕДАКТИРОВАТЬ: данные изменены.
2 ответа
Решение
Я обычно звоню bc -l
если мне нужны числа с плавающей запятой.
Использование scale
чтобы определить количество цифр после десятичной точки:
$ echo "scale=5; (${vals[1]} + ${vals[2]})/2.0" | bc
.49580
$ echo "scale=3; (${vals[1]} + ${vals[2]})/2.0" | bc
.495
От man bc
:
масштаб (выражение)
Значение функции масштаба - это количество цифр после десятичной точки в выражении.
Также обратите внимание, что этого достаточно:
vals=$(cat datafile.txt)