本部分内容参考自《Linux命令行与shell脚本编程大全 第3版》。
除了 gawk 中的内建函数,还可以在 gawk 程序中创建自定义函数。
定义函数
要定义自己的函数,必须用 function
关键字。
function name([variables])
{
statements
}
函数名必须能够唯一标识函数。可以在调用的 gawk 程序中传给这个函数一个或多个变量。
function printthird()
{
print $3
}
这个函数会打印记录中的第三个数据字段。
函数还能用 return
语句返回值:
return value
值可以是变量,或者是最终能计算出值的算式:
function myrand(limit)
{
return int(limit * rand())
}
你可以将函数的返回值赋给 gawk 程序中的一个变量:
x = myrand(100)
这个变量包含函数的返回值。
使用自定义函数
在定义函数时,它必须出现在所有代码块之前(包括 BEGIN
代码块)。乍一看可能有点怪异,但它有助于将函数代码与 gawk 程序的其他部分分开。
$ gawk '
> function myrand(limit){
> srand() # 让 rand() 产生的随机数发生变化
> return int(limit*rand())
> }
> BEGIN{
> result = myrand(100)
> print result
> }'
49
这个函数定义了 myrand()
函数,它会随机生成一个 0~100
之间的整数。在 gawk 程序中调用该函数并获取返回值然后打印到屏幕。
一旦定义了函数,你就能在程序的代码中随意使用。在涉及很大的代码量时,这会省去许多工作。
创建函数库
显而易见,每次使用函数都要重写一遍并不美妙。不过, gawk 提供了一种途径来将多个函数放到一个库文件中,这样你就能在所有的 gawk 程序中使用了。
首先,你需要创建一个存储所有 gawk 函数的文件。
$ cat awkfunc.lib
function myprint()
{
printf "%-16s - %s\n", $1, $4
}
function myrand(limit)
{
srand()
return int(limit * rand())
}
function printthird()
{
print $3
}
awkfunc.lib
文件含有三个函数定义。需要使用 -f
命令行参数来使用它们。很遗憾,不能将 -f
命令行参数和内联 gawk 脚本放到一起使用,不过可以在同一个命令行中使用多个 -f
参数。
因此,要使用库,只要创建一个含有你的 gawk 程序的文件,然后在命令行上同时指定库文件和程序文件就行了。
$ cat awktest
BEGIN{
result = myrand(100)
print result
}
$ gawk -f awkfunc.lib -f awktest
43
你要做的是当需要使用库中定义的函数时,将 awkfunc.lib
文件加到你的 gawk 命令行上就可以了。
评论区