AWK : 9 个 Awk 内置数字函数

举报
Tiamo_T 发表于 2022/02/04 10:08:00 2022/02/04
【摘要】 awk 有很多用于数值、字符串、输入和输出操作的内置函数。awk 有以下三种高级内置函数类别。 数字运算的内置函数 字符串操作的内置函数 输入输出操作的内置函数

awk 有很多用于数值、字符串、输入和输出操作的内置函数。awk 有以下三种高级内置函数类别。

  1. 数字运算的内置函数
  2. 字符串操作的内置函数
  3. 输入输出操作的内置函数

在本文中,让我们了解一下 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
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。