本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名原文链接~~~

AWK(8)之自定义函数

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:


本部分内容参考自《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 命令行上就可以了。

# AWK  

如果这篇文章对您有帮助,可点击下方链接分享给你的朋友们😋,如果遇到问题欢迎评论、留言~~~😇

评论

公众号:zze_coding

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×