定義和調用用戶自己的函數是幾乎每個高級語言都具有的功能,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中的自定義函數的知識,我們就講解到這裡了。