我需要逐行对文件中的数字求和。
文件:
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.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")
Bash/shell 算术无法处理浮点算术。您可以使用以下方法完成任务
awk
:这将通读您的文件并将每一行添加到
sum
. 完成读取文件后,它将打印sum
除以 3。纯娱乐
在这里,我们使用
dc
逆波兰计算器:将我们想要写成的数字相加-e0
然而,用零( )初始化堆栈并使其更容易因为总和的主体可以通过一个简单的生成
paste command
:最后,我们需要
+
总和和后缀除法的最终后缀,我们可以将其写入另一个-e
命令(不要忘记打印最终结果)为-e+3/p
.最后一个问题是,虽然
dc
可以在任意精度下工作,但除法默认精度为 0,因此将返回整数结果。我们可以使用2k
推2
送到堆栈然后将其弹出并使用结果设置精度的命令来更改它。把它们放在一起:
尝试这个:
x
没有定义。echo
forbc
才能工作(不是混合 bash 算术)。为了对数字求和,
numsum
从num-utils
包中将完全做到这一点:很高兴处理十进制数。
对于之后
numprocess
从同一包中进行的划分可以提供帮助:%
是如何numprocess
表示除法,而斜线是其参数结构的一个奇怪之处。