2

ツールの 1 つの出力を取得し、ファイル内の値を読み取る小さなスクリプトを作成しています。

私は配列をストレージとして使用しているので、配列がファイルからの値を取得したら、それらを処理してさまざまなメトリックを計算します。

今、私はこのようなことをすることは不可能であることに気付きました:

thearray=(1.1 2.2 3.3 4.4 5.5)


tempval=${thearray[0]} + ${thearray[1]}

配列の最初の要素 (位置 0) と 2 番目 (位置 1) を取得して合計し、その結果を tempval に保存したいと考えています。配列全体には浮動小数点数が含まれているため、シェルは配列内のデータの型を認識しており、合計を作成できるはずです。

代わりに、出力はフィールド 0 の値、「+」、およびフィールド 1 の値です。

echo $tempval
1.1+2.2

問題は数値を含む変数に一般的であり、シェルはそれらを文字列と見なし、合計ではなく連結を行うと想定しています。

${the array[0]} と ${the array[1]} の出力を取得し、最初にそれらを変数に入れると、$(( )) 構文を使用してそれらを合計できます

var1=${the array[0]}
var2=${the array[1]}

tempvar=$((var1+var2))

これは、浮動小数点数ではなく整数で機能するようです。

これを回避し、合計を行う前に変数を作成して配列値を格納することなく、算術合計を直接取得する方法はありますか? 14 を超える要素の合計を作成する必要があり、たとえば平均を計算するときに、値を保持するために 14 の異なる変数を作成する必要があるのは大きな無駄のようです。

私はこれをやろうとしました

tempval=$((${thearray[0]} + ${thearray[1]}))

しかし、構文エラーが返されます:無効な算術演算子です。他の言語では float としてキャストしますが、ここではかなり迷っています。

どんな提案でも大歓迎です。ありがとう

4

2 に答える 2

6
$ thearray=(1.1 2.2 3.3 4.4 5.5)
$ sum=$( IFS="+"; bc <<< "${thearray[*]}" )
$ echo $sum
16.5

このフォーム"${array[*]}"は、各配列要素が の最初の文字で結合された文字列を返します$IFS1.1+2.2+3.3+4.4+5.5そのため、文字列をに渡していますbc

于 2013-09-20T15:51:38.913 に答える