定义和调用用户自己的函数是几乎每个高级语言都具有的功能,Unix awk也不例外,但原始的Unix awk并不提供函数功能,只有在nawk或较新的Unix awk版本中才可以增加函数。
函数的使用包含两部分:函数的定义与函数调用。其中函数定义又包括要执行的代码(函数本身)和从主程序代码传递到该函数的临时调用。
Unix awk函数的定义方法如下:
function 函数名(参数表){函数体}
在gawk中允许将function省略为func,但其它版本的awk不允许。函数名必须是一个合法的标志符,参数表中可以不提供参数(但在调用函数时函数名后的一对括号仍然是不可缺少的),也可以提供一个或多个参数。与C语言相似,awk的参数也是通过值来传递的。
在Unix awk中调用函数比较简单,其方法与C语言相似,但Unix awk比C语言更为灵活,它不执行参数有效性检查。
换句话说,在你调用函数时,可以列出比函数预计(函数定义中规定)的多或少的参数,多余的参数会被Unix awk所忽略,而不足的参数,awk将它们置为缺省值0或空字符串,具体置为何值,将取决于参数的使用方式。
Unix awk函数有两种返回方式:隐式返回和显式返回。当Unix awk执行到函数的结尾时,它自动地返回到调用程序,这是函数是隐式返回的。如果需要在结束之前退出函数,可以明确地使用返回语句提前退出。方法是在函数中使用形如:return 返回值 格式的语句。
例:下面的例子演示了函数的使用。在这个示例中,定义了一个名为print_header的函数,该函数调用了两个参数FileName和PageNum,FileName参数传给函数当前使用的文件名,PageNum参数是当前页的页号。这个函数的功能是打印(显示)出当前文件的文件名,和当前页的页号。完成这个功能后,这个函数将返回下一页的页号。
- nawk
- 'BEGIN{pageno=1;file=FILENAME
- pageno=print_header(file,pageno);#调用函数print_header
- printf("当前页页号是:%d ",pageno);
- }
- #定义函数print_header
- function print_header(FileName,PageNum){
- printf("%s %d ",FileName,PageNum); >PageNum++;return PageNUm;
- }
- }' myfile
执行这个程序将显示如下内容:
myfile 1
当前页页号是:2
Unix awk中的自定义函数的知识,我们就讲解到这里了。
【编辑推荐】