您的位置:首页 > 运维架构 > Shell

linux bash bc awk 浮点 计算 比较

2014-02-12 19:39 381 查看
Bash中的变量没有数据类型的定义,这样,在处理字符串和数值时会带来麻烦。例如,使用-eq比较数值,==比较字符串等。另外,Bash中常用的let、expr仅支持整数运算,不支持浮点数计算。要实现浮点数计算,可以使用bc或awk。

一、bc

bc是一个常用的计算器,可以计算浮点数:

引用
$ bc

bc 1.06

Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.

This is free software with ABSOLUTELY NO WARRANTY.

For details type `warranty'.

scale=4

2.53/3.64

.6950

但bc不适合用于Bash脚本中。

二、awk

更好的方法,是借助awk强大的函数功能。

1、计算浮点数

引用
$ n=`awk -v x=2.53 -v y=3.64 'BEGIN {printf "%.2f\n",x/y}'`

$ echo $n

0.70

或者

引用
$ n=`awk 'BEGIN {x=2.53;y=3.64;printf "%.2f\n",x/y}'`

$ echo $n

0.70

又或者

引用
$ echo '2.53 3.64'|awk '{printf "%.2f\n",$1/$2}'

0.70

2、比较浮点数

awk还可以用于比较浮点数

引用
$ echo 123.45 123.44 | awk '{if($1>$2) {printf"%f greater then %f\n",$1,$2} else {printf"%f less then %f\n",$1,$2}}'

123.450000 greater then 123.440000

三、其他方法

当然,还可以用支持浮点预算的语言,如perl或python等,放在Bash脚本中运行:

引用
$ perl -e 'if ($ARGV[0]>$ARGV[1]) { printf "%f greater then %f\n",$ARGV[0],$ARGV[1];} else { printf "%f less then %f\n",$ARGV[0],$ARGV[1];}' 123.45 123.44

123.450000 greater then 123.440000

但这时似乎已经没有用Bash的必要了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: