如同 awk内置变量,awk还具有许多用于数字,字符串,输入和输出操作的内置函数。 Awk具有以下三种类型的高级内置函数类别。
- 内置数字运算功能
- 字符串操作的内置函数
- 输入输出操作的内置功能
对于刚接触awk的用户,请参考我们正在进行的 awk示例 系列,我们讨论了— awk简介 , awk变量 和 awk运算符 .
在本文中,让我们回顾一下awk Numeric内置函数。
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的自然对数。仅当n为正数时,log()返回对数值。如果您提供任何无效数字(甚至为负),则会引发错误。
例
$ 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(不是数字)
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使用某种算法来生成随机数。由于此算法是固定的,因此数字是可重复的。
例
下面的示例生成1000个介于0到100之间的随机数,并显示每个数字的使用频率
$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
如果您喜欢这篇文章,您可能还会喜欢..
![]() |
![]() |
![]() |
![]() |
>对于浮点数,它将产生最接近的整数。
不正确它会截断。