浮点运算在UNIX shell脚本(Floating-point arithmetic in UNI

2019-07-17 23:59发布

如何做浮点数如1.503923在shell脚本算术? 浮点数字是从一个文件作为字符串拉。 该文件的格式如下:

1.5493482,3.49384,33.284732,23.043852,2.2384...
3.384,3.282342,23.043852,2.23284,8.39283...
.
.
.

下面是一些简单的示例代码,我需要工作。 一切正常,直到算术。 我拉了文件中的行,然后从该线拉出多个值。 我认为这将减少对搜索的处理时间,因为这些文件是巨大的。

# set vars, loops etc.

while [ $line_no -gt 0 ]
do
    line_string=`sed -n $line_no'p' $file_path`  # Pull Line (str) from a file
    string1=${line_string:9:6}                   # Pull value from the Line
    string2=${line_string:16:6}
    string3=...
    .
    .
    .
    calc1= `expr $string2 - $string7` |bc -l     # I tried these and various
    calc2= ` "$string3" * "$string2" ` |bc -l    # other combinations
    calc3= `expr $string2 - $string1`
    calc4= "$string2 + $string8" |bc
    .
    .
    .
    generic_function_call                        # Use the variables in functions
    line_no=`expr $line_no - 1`                  # Counter--
done

输出我不断收到:

expr: non-numeric argument
command not found

Answer 1:

那这个呢?

calc=$(echo "$String2 + $String8"|bc)

这将使bc增加$ String2的和$ String8的值,并将结果保存在变量calc



Answer 2:

我相信你应该使用: bc

例如:

echo "scale = 10; 123.456789/345.345345" | bc

(这是Unix的方式:每个工具专业做好他们应该做的事情,他们都共同做大事不与其他模拟一个伟大的工具,让他们一起工作。)

输出:

.3574879198

或与一个规模1 ,而不是10

echo "scale = 1; 123.456789/345.345345" | bc

输出:

.3

请注意,这不进行四舍五入。



Answer 3:

如果你没有“BC”你可以使用JAST“AWK”:

calc=$(echo 2.3 4.6 | awk '{ printf "%f", $1 + $2 }')


Answer 4:

规模在BC是precission所以为4的规模如果键入BC <<<“规模= 4; 22.0 / 7”你得到3.1428作为一个答案。 如果您使用的8尺度你3.14285714这是浮点后8位数字。 所以,是一家规模precission因素



文章来源: Floating-point arithmetic in UNIX shell script