AWK : 9 个 Awk 内置数字函数
awk 有很多用于数值、字符串、输入和输出操作的内置函数。awk 有以下三种高级内置函数类别。
- 数字运算的内置函数
- 字符串操作的内置函数
- 输入输出操作的内置函数
在本文中,让我们了解一下 awk 数字内置函数。
1.awk int(n)函数
int() 函数为您提供给定参数的整数部分。这会产生给定 n 的最小整数部分。n 是任何带或不带浮点的数字。如果您将整数作为参数,则此函数返回相同的值。对于浮点数,它会截断。
例子
$ awk 'BEGIN{
print int(3.534);
print int(4);
print int(-5.223);
print int(-5);
}'
3
4
-5
-5
2.awk log(n)函数
log() 函数提供给定参数 n 的自然对数。log() 仅在 n 为正数时返回对数值。如果您提供任何无效数字(甚至是负数),则会引发错误。
例子
$ awk 'BEGIN{
print log(12);
print log(0);
print log(1);
print log(-1);
}'
2.48491
-inf
0
nan
在上面的输出中,您可以确定 log(0) 是无穷大,显示为 -inf,并且 log(-1) 会给出错误 nan (Not a Number)
3.awk sqrt(n)函数
sqrt 函数给出给定整数 n 的正平方根。此函数也接受正数,如果您将负数作为参数,它会返回 nan 错误。
例子
$ awk 'BEGIN{
print sqrt(16);
print sqrt(0);
print sqrt(-12);
}'
4
0
nan
4. awk exp(n) 函数
exp 函数提供 e 的 n 次方。
例子
$ awk 'BEGIN{
print exp(123434346);
print exp(0);
print exp(-12);
}'
inf
1
6.14421e-06
在上面的输出中,对于 exp(1234346),它给出了输出无穷大,因为它超出了范围。
5. awk sin(n) 函数
sin() 函数给出 n 的正弦值,n 以弧度表示。
例子
$ awk 'BEGIN {
print sin(90);
print sin(45);
}'
0.893997
0.850904
6.awk cos(n)函数
cos() 返回 n 的余弦值,n 以弧度表示。
例子
$ awk 'BEGIN {
print cos(90);
print cos(45);
}'
-0.448074
0.525322
7. awk atan2(m,n) 函数
此函数以弧度为单位为您提供 m/n 的反正切。
例子
$ awk 'BEGIN {
print atan2(30,45);
}'
0.588003
8. awk rand() 函数
rand() 用于生成 0 和 1 之间的随机数。它从不返回 0 和 1。它总是返回 0 和 1 之间的值。数字在一次 awk 运行中是随机的,但在运行中是可预测的。awk 使用一些算法来生成随机数。由于该算法是固定的,因此数字是可重复的。
例子
以下示例生成 0 到 100 之间的 1000 个随机数,并显示每个数字的使用频率
$cat rand.awk
BEGIN {
while(i<1000)
{
n = int(rand()*100);
rnd[n]++;
i++;
}
for(i=0;i<=100;i++) {
print i,"Occured", rnd[i], "times";
}
}
$
在此处粘贴了上述脚本的一些输出。
$awk -f rand.awk
0 Occured 6 times
1 Occured 16 times
2 Occured 12 times
3 Occured 6 times
4 Occured 13 times
5 Occured 13 times
6 Occured 8 times
7 Occured 7 times
8 Occured 16 times
9 Occured 9 times
10 Occured 6 times
11 Occured 9 times
12 Occured 17 times
13 Occured 12 times
从上面的输出中,可以确定 rand() 函数可以经常生成可重复的数字。
9.awk srand(n) 函数
srand() 用于使用给定的参数 n 初始化随机生成。因此,每当程序执行开始时,它就会开始从 n 生成数字。如果没有给出参数,它使用一天中的时间来生成种子。
例子:生成5个从5到50的随机数
$cat srand.awk
BEGIN {
#initialize the seed with 5.
srand(5);
# Totally I want to generate 5 numbers.
total=5;
#maximum number is 50.
max=50;
count=0;
while(count < total) {
rnd = int(rand() * max);
if ( array[rnd] == 0 ) {
count++;
array[rnd]++;
}
}
for ( i=5; i<=max; i++) {
if ( array[i] )
print i;
}
}
在这个 srand.awk 中,使用 rand() 函数,生成数字并乘以最大值,生成最大值为 50 的数字,并检查生成的随机数是否已经存在于数组中,如果不存在,增加它的索引以及增加循环计数。这样它就会生成 5 个这样的数字,最后在 for 循环中从最小数字到最大数字,并仅打印具有该值的索引。
这是上述脚本的输出
$ awk -f srand.awk
9
15
26
37
39
- 点赞
- 收藏
- 关注作者
评论(0)