UNIX shell脚本中的浮点运算

如何在shell脚本中使用浮点数(例如1.503923)进行算术运算? 浮点数字作为string从文件中提取。 该文件的格式如下:

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

这里有一些简单的示例代码,我需要工作。 一切工作正常的算术。 我从文件中拉出一行,然后从该行中拉出多个值。 我认为这会减lesssearch处理时间,因为这些文件是巨大的。

 # 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 

那这个呢?

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

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

我相信你应该使用: bc

例如:

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

(这是unix的方式:每个工具都专门做好他们应该做的事情,他们都一起工作,做伟大的事情,不要模仿一个伟大的工具,使他们一起工作。)

如果你没有“bc”,你可以使用'awk':

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

如果您输入bc <<<'scale = 4; 22.0 / 7',则得到3.1428作为答案,则bc中的缩放比例就是缩放比例。 如果你使用8的比例,你会得到3.14285714,这是浮点数之后的8个数字。 所以规模是一个决定因素