有时候做测试,需要一些随机数,awk中的rand()函数就可以产生随机数
rand()说明如下:
rand()函数返回[0,1)之间的浮点数
int( n * rand() ),返回[0,n)之间的整数,也就是0~n-1之间的随机数
int( n * rand() ) + 1,返回1-n之间的随机数
注意,这里的int()是一个函数,不是表示整形,所以一定要加上括号,它的作用是取数字的整数部分
示例1: 产生随机数
随机产生10个学生的成绩,取值范围0-100
qingsong@db2a:~$ awk '
> BEGIN {
> for (i = 1; i <= 10; i++)
> print int( 101 * rand() )
> }'
57
7
64
27
39
18
70
8
60
71
示例2:产生10个随机的字符串:
qingsong@db2a:~$ cat randword.awk
BEGIN {
WORDNUM = 10
for (i = 1; i <= WORDNUM; i++) {
print randword(20)
}
}
# randint(n): return a random integer number which is >= 1 and <= n
function randint(n) {
return int(n *rand()) + 1
}
# randlet(): return a random letter, which maybe upper, lower or number.
function randlet() {
return substr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", randint(62), 1)
}
# randword(LEN): return a rand word with a length of LEN
function randword(LEN) {
randw=""
for( j = 1; j <= LEN; j++) {
randw=randw randlet()
}
return randw
}
qingsong@db2a:~$ awk -f randword.awk
wxXe8fVGnC4ANvrQrYlp
k9uwRkTNBpTQCrGNdsL4
ANbgdugqUFigTkhptKZC
1yGQGz1CW8Q6J1KJuzf1
KRCwdjYhqoKfpiVFgqxC
asuwcoE2MN18JxFpyUrb
6MPydAXBFBDFJzBmq5JQ
6taOEQOjnwaH9bN47h6A
fMZywlOZcoSLOgqjvd9R
CUAPqkaeU9nLtv1xuslc
qingsong@db2a:~$
这里有必要介绍一下,里面用到了三个自定义函数:
randint(n)返回一个1-n之间的随机整数
randlet()返回a-zA-Z0-9当中随机的一个字符,62即前面那个字符串的长度
randword(LEN)则通过多次连接randlet()返回的随机字符,返回一个随机的字符串,长度为LEN
参考资料:《The AWK Programming Language》