Shell脚本处理浮点数的运算和比较实例

您所在的位置:网站首页 shell比较大小 Shell脚本处理浮点数的运算和比较实例

Shell脚本处理浮点数的运算和比较实例

2023-03-21 00:37| 来源: 网络整理| 查看: 265

通过top命令看到的进程的CPU、内存的使用率的百分比是一个浮点数,我需要在写脚本时对其进行处理,所以学习了一些,总结如下。

其实,Shell(这里是Bash)本身不具备处理浮点计算的能力,但是可以使用“bc”这个高精度的计算器工具来帮助,另外,也可以在Bash中调用“awk”脚本来处理浮点运算。

1. 用bc来处理计算(包括整型和浮点计算)

bc – An arbitrary precision calculator language(1). 通常在Bash脚本中使用bc的范例格式为:variable=$(echo “OPTIONS; OPERATIONS” | bc [options]) 即:echo “[选项];操作” | bc [选项](2). 在下面的脚本中,提到在第一个选项中,“scale”变量表示输出中小数点后的精度,可以用于控制计算结果的精度;“ibase”和“obase”分别表示输入和输出数据的进制,可以用于数值进制的转换。(3). 浮点数的比较,如“if [ $(echo "$big > $small" | bc) -eq 1 ]”,将一个逻辑判断式用管道传给bc。如果结果为真则输出1,否则输出0,然后就可以利用这个结果进行进一步的操作了。(4). bc本来是用一个文件作为输入进行计算的(后面也有演示),所以可以将很复杂的计算写到文件中,然后让bc工具去处理到处计算结果。注意一下:在使用除法运算符/时,要想保留小数,需要自己设置scale,否则默认时scale,小数点后时0位。

2. 使用awk来处理浮点计算和浮点数比较

不解释过多了,写了示例脚本如下,看懂了这个就会知道怎么处理浮点计算和浮点数比较了。

复制代码 代码如下:#!/bin/bash# author: Jay # some examples for playing with floating point number.

# basic usage of 'bc' tool in Bash.a=3.33b=3.3c=$(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' toolr=$(echo 'ibase=10;obase=2; 15+16' | bc)echo "binary of (15+16) is $r"

# comparison for floating point numbers using 'bc'big=100small=99.9if [ $(echo "$big > $small" | bc) -eq 1 ]; then        echo "$big is bigger than $small"fi

# deal with floating point numbers with 'awk' languageecho $(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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3