AWK 内置的数学函数
我一直以为 AWK 内置的算术运算函数会和 C 或 Java 或其它语言一样丰富,没想到,只是内置了几个常见的数学函数而已
反正切 atan2(y, x)
函数 atan2(y, x)
以弧度为单位返回 (y/x)
的反正切值。
y x 两个参数请参考平面几何图形
y ^ |----------.(x,y) | | | | -----------o-------------> x | | |
它的原型如下
atan2(y, x)
2
的意思是这个函数接受两个参数。
参数说明
参数 | 说明 |
---|---|
y | 某个点坐标中的 y 值 |
x | 某个点坐标中的 x 值 |
范例
没啥好说的,平面几何知识忘的一干二净,直接看代码吧
[www.twle.cn]$ awk 'BEGIN { PI = 3.14159265 x = -10 y = 10 result = atan2 (y,x) * 180 / PI; printf "圆弧 (x=%f, y=%f) 的反正切值为 %f 度\n", x, y, result }'
运行以上 awk 命令,输出结果如下
圆弧 (x=-10.000000, y=10.000000) 的反正切值为 135.000000 度
余弦值 cos(expr)
函数 cos(expr)
以弧度为单位返回表达式 expr
的余弦值。
y x 两个参数请参考平面几何图形
y ^ |----------.(x,y) | | | | -----------o-------------> x | | |
参数说明
参数 | 说明 |
---|---|
expr | 要求取余弦值的表达式 |
范例
没啥好说的,还是那句话: 平面几何知识忘的一干二净,直接看代码吧
[www.twle.cn]$ awk 'BEGIN { PI = 3.14159265 param = 60 result = cos(param * PI / 180.0); printf "弧度 %f 的余弦值为 %f.\n", param, result }'
运行以上 awk 命令,输出结果如下
弧度 60.000000 的余弦值为 0.500000.
e 为底的指数值 exp(expr)
exp
是高等数学里以自然常数 e
为底的指数函数,它同时又是 航模 名词,全称 Exponential(指数曲线)
在数学中,经常使用 y = ex 来表示
函数 exp(expr)
用于求取以 e 为底的 expr 的指数值,也就是求 e[expr] 的值
它的原型为
exp(expr)
参数说明
参数 | 说明 |
---|---|
expr | 指数 |
范例
下面的代码,演示了如何使用 exp(expr) 函数求取 eexpr 的数学值
[www.twle.cn]$ awk 'BEGIN { param = 5 result = exp(param); printf "以 e 为底的 %f 指数值为 %f.\n", param, result }'
运行以上 awk 命令,输出结果如下
以 e 为底的 5.000000 指数值为 148.413159.
转换为整数 int(expr)
函数 int(expr)
用于把表达式 expr 的计算结果转换为整数。
它的原型如下
int(expr)
参数说明
参数 | 说明 |
---|---|
expr | 要转换为整数的表达式 expr |
- 如果 expr 的计算结果是整数,则直接返回。
- 如果 expr 的计算结果是浮点数,则抛弃小数点。
- 如果 expr 的计算结果是字符串,则尽可能的转换为数字
范例 1
[www.twle.cn]$ awk 'BEGIN { param = "5.12345" result = int(param) print "int(", param , ") 转换为整数为", result }'
运行以上 awk 命令,输出结果如下
int( 5.12345 ) 转换为整数为 5
范例 2
[www.twle.cn]$ awk 'BEGIN { param = "5.12345" result = int(param) print "int(", param , ") 转换为整数为", result }'
运行以上 awk 命令,输出结果如下
int( 5.12345 ) 转换为整数为 5
范例 3
[www.twle.cn]$ awk 'BEGIN { param = "542xxx" result = int(param) print "int(", param , ") 转换为整数为", result }'
运行以上 awk 命令,输出结果如下
int( 542xxx ) 转换为整数为 542
以 e 为底的对数 / 自然对数 log(expr)
如果 ax=N( a>0,且 a≠1 ), 那么数 x 叫做以 a 为底 N 的对数,记作 x=logaN,读作以 a 为底 N 的对数
其中 a 叫做对数的底数,N 叫做真数。
通常我们将以 e 为底的对数叫自然对数,并把 logeN 记为 lnN
函数 log(expr)
用于求取表达式 expr 的自然对数结果。
它的原型如下
log(expr)
范例
对数也忘的一干二净了,算了,直接看代码吧
[www.twle.cn]$ awk 'BEGIN { param = 10 result = log (param) printf "log(%f) = %f\n", param, result }'
运行以上 awk 命令,输出结果如下
log(10.000000) = 2.302585
随机浮点数 rand()
函数 rand()
用于返回一个 [0,1)
之间的随机浮点数 N。
左闭右开的 [0,1)
表示 N 的值满足 0 <= N < 1
它的函数原型如下
rand()
范例
没啥好说,直接看代码
[www.twle.cn]$ awk 'BEGIN { print "Random num1 =" , rand() print "Random num2 =" , rand() print "Random num3 =" , rand() }'
运行以上 awk 命令,输出结果如下
Random num1 = 0.840188 Random num2 = 0.394383 Random num3 = 0.783099
正弦值 sin(expr)
函数 sin(expr)
以弧度为单位返回表达式 expr 的正弦值。
它的函数原型如下
sin(expr)
参数说明
参数 | 说明 |
---|---|
expr | 要求取正弦值的表达式 |
范例
哎,还是没啥好说的,悲剧啊,直接看代码
[www.twle.cn]$ awk 'BEGIN { PI = 3.14159265 param = 30.0 result = sin(param * PI /180) printf "%f 的正弦值为 %f.\n", param, result }'
运行以上 awk 命令,输出结果如下
30.000000 的正弦值为 0.500000.
sqrt(expr)
函数 sqrt(expr)
用于求取表达式 expr 的开平方。也就是数学运算 √expr
它的函数原型如下
sqrt(expr)
参数说明
参数 | 说明 |
---|---|
expr | 要开平方的表达式 |
范例
哎,还是没啥好说的,悲剧啊,直接看代码
[www.twle.cn]$ awk 'BEGIN { param = 1024.0 result = sqrt(param) printf "sqrt(%f) = %f\n", param, result }'
运行以上 awk 命令,输出结果如下
sqrt(1024.000000) = 32.000000
srand([expr])
srand([expr])
函数使用使用一个种子值来生成一个随机数。
srand([expr])
函数使用表达式 expr
的值作为种子来生成一个随机数。如果没有传递 expr
,则默认使用当前时间作为种子
需要注意的是,如果传递相同的种子 expr
,那么该函数生成的随机数也是一样的。
[www.twle.cn]$ awk 'BEGIN { param = 10 printf "srand() = %d\n", srand() printf "srand(%d) = %d\n", param, srand(param) }'
运行以上 awk 命令,输出结果如下
srand() = 0 srand(10) = 1558857510