bash - 读取浮点数
问题描述
我正在尝试从“2.0 / 3.0”之类的字符串中收集数据。但是当我尝试以下操作时出现错误。
for i in t01 t02 t03 t04 t05 t06 t07 t08 t09 t10 t11; do
if [ -e "$i/feedback.txt" ]; then
grade=`tail -1 $i/feedback.txt | tr -d [:blank:]`
if [[ $grade =~ ^[0-9]+\.?[0-9]*/[0-9]+\.?[0-9]*$ ]]; then
IFS='/' read -ra grArray <<< "$grade"
score=${grArray[0]}
max=${grArray[1]}
total_tmax=$total_tmax+$max
total_t=$total_t+$score
echo $i: $score / $max
else
echo $i: 0 / 0
输出
t01: 4 / 4
t02: 2 / 3
t03: 3 / 3
t04: 3 / 3
t02/pp_marks.sh: line 39: 13+3.0: syntax error: invalid arithmetic operator (error token is ".0")
解决方案
根据评论,bash 不允许浮点运算,只允许整数。对于简单的任务,您可以使用该bc
工具(对于更复杂的操作,请考虑使用脚本引擎,如awk
、python
或perl
)。请注意,使用 bc 您必须指定精度。
total_tmax=$(bc <<<"scale=1 ; $total_tmax+$max")
total_t=$(bc <<< "scale=1 ; $total_t+$score")
echo "$i: $score / $max"
另请参阅:如何在 bash 中使用浮点除法?
推荐阅读
- swift - Swift - 是字符串还是整数?
- flutter - 创建视频列表的最佳方式?
- javascript - 无效的日期出现在 Firefox 中 nodejs 的控制台中
- node.js - 如何解决节点/快递的“PII 被隐藏”
- jquery - 如何选择一个类并对其进行操作
- stanford-nlp - 关于中文使用quote和coref的问题
- python-3.x - 通过对其中一些数据内容进行分组来选择 python 列表的元素数量
- python-3.x - 我们如何从值等于 0 的列表中删除多个项目?
- python - 重命名一个新文件,当有相同名称的文件时,没有限制名称
- cmake - ExternalProject_Add:如何在您的项目中使用构建依赖项?