ファイルの数を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
。ファイルの読み取りが終了すると、sum
3で割った内容が印刷されます。
答え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
x
定義されていません。- これが機能するには
echo
forが必要です(混合bash算術ではありません)。bc
答え4
数字を合計すると、numsum
num-utils
包装からこれを一度に行います。
x=$(numsum file.txt)
10 進数を幸せに処理します。
numprocess
同じパッケージで後続のパーティション化を実行するのに役立ちます。
numsum file.txt | numprocess /%3/
%
numprocess
は除算を表現する方法であり、スラッシュは引数構造で奇妙です。