Bashでファイルの変数を合計する方法

Bashでファイルの変数を合計する方法

ファイルの数を1行ずつ合計する必要があります。

文書:

1.0
0.46
0.67

合計して3に分けたいです。

私は現在以下を持っています:

while IFS= read -r var
do
   x=$(($var + $x)) | bc -l
done < "file.txt"
echo "$x / 3"

私の間違い:

-bash: 1.0 + 0: syntax error: invalid arithmetic operator (error token is ".0 + 0")

答え1

Bash/シェル演算は浮動小数点演算を処理できません。以下を使用して操作を実行できますawk

awk '{sum= sum+$1} END {print sum/3}' file

その後、ファイルを読み取り、各行をに追加しますsum。ファイルの読み取りが終了すると、sum3で割った内容が印刷されます。

答え2

楽しく

$ paste -sd+ file | dc -e2k0 -f- -e+3/p
.71

ここではdc 逆光沢電卓:書きたい数字を足してください。

1.0 0.46 + 0.67 +

ただし、スタックを0()で埋めることで-e0簡単に作成できます。

0 1.0+0.46+0.67 +

合計の本文は、次のように簡単に生成できるからですpaste command

$ paste -sd+ file
1.0+0.46+0.67

最後に、合計の最後のサフィックス+とサフィックスの分割が必要です。これを別の-eコマンドで作成できます(最終結果を印刷することを忘れないでください)-e+3/p

最後の問題の1つはdc任意の精度で動作しますが、除算のデフォルト値は精度0であるため、整数の結果が返されることです。スタックにプッシュしてから、スタックから取り出す2kコマンドを使用してそれを変更し、結果を使用して精度を設定できます。2

一緒に入れてください:

paste -sd+ file | dc -e2k0 -f- -e+3/p

答え3

この試み:

x=0
while IFS= read -r var; do
    x="$(echo "$var + $x" | bc -l)"
done < "file.txt"
echo "$x / 3" | bc -l
  1. x定義されていません。
  2. これが機能するにはechoforが必要です(混合bash算術ではありません)。bc

答え4

数字を合計すると、numsumnum-utils包装からこれを一度に行います。

x=$(numsum file.txt)

10 進数を幸せに処理します。

numprocess同じパッケージで後続のパーティション化を実行するのに役立ちます。

numsum file.txt | numprocess /%3/

%numprocessは除算を表現する方法であり、スラッシュは引数構造で奇妙です。

関連情報