如何减去从字符串派生的两个浮点数

时间:2015-09-27 13:22:01

标签: string bash shell floating-point subtraction

浮点数来自输出字符串。这是我的示例代码:

#!/bin/bash

    output="0.15 0.11"
    cputime=${output[0]}
    gputime=${output[1]}
    echo $cputime $gputime

    diff=`echo "$cputime - $gputime" | bc`
    echo $diff

2 个答案:

答案 0 :(得分:3)

您可以使用以下代码更好地编写用于分隔值的代码:

#!/bin/bash
output="0.15 0.11"
cputime=${output%% *}
gputime=${output##* }
diff=$(echo "$cputime - $gputime" | bc)
echo $diff

##%%分别是removal-of-longest-prefixremoval-of-longest-suffix运算符,删除了从第一个空格开始的所有内容(<space>*)或所有内容到最后一个空格(*<space>)。

当前代码不起作用的原因是因为$output 不是一个数组,其中两个值位于不同的索引中,因为它会像你做的那样:

output=("0.15" "0.11")

或者,既然您已经调用了外部可执行文件bc,那么您可以通过添加awk魔法来缩短代码:

#!/bin/bash
output="0.15 0.11"
diff=$(awk '{print $1 - $2}' <<< "$output" | bc)
echo "$diff"

答案 1 :(得分:2)

假设值由单个空格分隔:

$ echo "$output"
0.15 0.11
$ tr ' ' - <<< "$output" | bc -l
.04