在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
通过top命令看到的进程的CPU、内存的使用率的百分比是一个浮点数,我需要在写脚本时对其进行处理,所以学习了一些,总结如下。 其实,Shell(这里是Bash)本身不具备处理浮点计算的能力,但是可以使用“bc”这个高精度的计算器工具来帮助,另外,也可以在Bash中调用“awk”脚本来处理浮点运算。 1. 用bc来处理计算(包括整型和浮点计算) 不解释过多了,写了示例脚本如下,看懂了这个就会知道怎么处理浮点计算和浮点数比较了。 复制代码 代码如下: #!/bin/bash # author: Jay <[email protected]> # some examples for playing with floating point number. # basic usage of 'bc' tool in Bash. a=3.33 b=3.3 c=$(echo "$a + $b" | bc) d=$(echo "$a * $b" | bc) e=$(echo "scale=5; $a / $b" | bc) echo "c=a+b=$a+$b=$c" echo "d=a*b=$a*$b=$d" echo "e=a/b=$a/$b=$e" # "-l" parameter for 'bc' means using math library. pi=$(echo "scale=10; 4*a(1)" | bc -l) s=$(echo "s($pi/6)" | bc -l) echo "pi=$pi" echo "s=sin(pi/6)=$s" # use more options of 'bc' tool r=$(echo 'ibase=10;obase=2; 15+16' | bc) echo "binary of (15+16) is $r" # comparison for floating point numbers using 'bc' big=100 small=99.9 if [ $(echo "$big > $small" | bc) -eq 1 ]; then echo "$big is bigger than $small" fi # deal with floating point numbers with 'awk' language echo $(awk -v x=10 -v y=2.5 'BEGIN {printf "10/2.5=%.2f\n",x/y}') v=$(echo $big $small | awk '{ printf "%0.8f\n" ,$1/$2}') echo "$big / $small = $v" echo $big $small | awk '{if($1>$2) {printf"%f > %f\n",$1,$2} else {printf"%f <%f\n",$1,$2}}' 执行的结果如下: 复制代码 代码如下: master@jay-linux:~/workspace/mygit/shell/sh2012$ ./floating-point.sh c=a+b=3.33+3.3=6.63 d=a*b=3.33*3.3=10.98 e=a/b=3.33/3.3=1.00909 pi=3.1415926532 s=sin(pi/6)=.49999999994373819220 binary of (15+16) is 11111 100 is bigger than 99.9 10/2.5=4.00 100 / 99.9 = 1.00100100 100.000000 > 99.900000 另外,bc处理一个文件中的计算逻辑,演示如下: 复制代码 代码如下: master@jay-linux:~/workspace/mygit/shell/sh2012$ cat temp.bc 3+8 3/8 scale=2; 3/8 master@jay-linux:~/workspace/mygit/shell/sh2012$ bc -q temp.bc 11 0 .37 bc是强大的工具,请“man bc”查看详情;同样,请“man awk”。
|
请发表评论