Передача значений массива 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)
Другие вопросы по тегам