awk有内置变量,awk同时还拥有用于数值、字符串、输入和输出操作的内置函数。
其中为数值操作而设计的Awk内置函数有以下九个:
Awk int(n) 函数
int() 函数返回给定参数的整数部分。它将返回最接近给定参数n的整数。对于整数参数,此函数返回相同的整数值。对于浮点数参数,它将对其进行截断。
示例
$ awk 'BEGIN{
print int(3.53);
print int(-5.22);
}'
3
-5
Awk log(n) 函数
log() 函数返回给定参数n的自然对数。log() 函数仅在n为正数时返回对数值。如果给定无效的数字(比如负数),则会显示错误代码。
示例:
$ awk 'BEGIN{
print log(11);
print log(0);
print log(-1);
}'
2.3979
-inf
-nan
log(0) 报错为 -inf, log(-1) 会报错 nan (Not a Number)
Awk sqrt(n) 函数
sqrt() 函数返回给定整数n的正平方根。如果给定负数作为参数,则返回nan(Not a Number)错误。
示例:
$ awk 'BEGIN{
print sqrt(36);
print sqrt(0);
print sqrt(-10);
}'
6
0
nan
Awk exp(n) 函数
exp() 函数提供e的n次幂的结果。
示例:
$ awk 'BEGIN{
print exp(123434345);
print exp(0);
print exp(-12);
}'
inf
1
6.14421e-06
exp(123434345) 返回 Infinity 是因为它超出了 exp() 函数的定义域。
Awk sin(n) 函数
sin() 函数返回n的正弦值。
示例:
$ awk 'BEGIN {
print sin(90);
print sin(45);
}'
0.893997
0.850904
Awk cos(n) 函数
cos() 函数返回n的余弦值。
示例:
$ awk 'BEGIN {
print cos(90);
print cos(45);
}'
-0.448074
0.525322
Awk atan2(m,n) 函数
此函数返回以弧度表示的m/n的反正切值。
示例:
$ awk 'BEGIN {
print atan2(30,45);
}'
0.588003
Awk rand() 函数
rand() 函数用于生成0和1之间的随机数。它不会返回0和1,而是始终返回介于0和1之间的值。在Awk运行中,生成的数字是随机的,但Awk使用某种算法来生成随机数。由于这个算法是固定的,所以生成的数字是可重复的。
示例: 这个例子产生0到100的100个随机数,然后统计每个数字的使用频率。
$cat rand_example.awk
BEGIN {
while(i<100)
{n = int(rand()*100);rnd[n]++;i++;
}
for(i=0;i<=100;i++) {print i,"Occured", rnd[i], "times";
}
}
运行后得到的部分结果
$awk -f rand_example.awk
0 Occured times
1 Occured 2 times
2 Occured 1 times
\3 Occured times
4 Occured times
Awk srand(n) 函数
srand() 函数用给定的参数n来设置随机种子,一般与rand函数配合使用,如果参数为空,默认使用当前时间为种子。
示例:
$cat srand_example.awk
BEGIN {
srand(5);
total=5;
max=50;
count=0;
while(count < total) {rnd = int(rand() * max);if ( array[rnd] == 0 ) {count++;array[rnd]++;}
}
for ( i=1; i<=max; i++) {if ( array[i] )print i "and" array[i];
}
}
在这个脚本中,使用rand()函数生成一个数字,将其与最大值相乘以生成一个值,然后检查生成的随机数是否已存在于数组中。如果不存在,则增加其索引和循环计数器,最后,只打印出值为存在的索引。
以上是Awk中一些强大的针对数值操作的内置函数,熟悉这些内置函数也有利于更好的使用AWK。