Unix awk中的自定義函數(shù)
定義和調(diào)用用戶自己的函數(shù)是幾乎每個高級語言都具有的功能,Unix awk也不例外,但原始的Unix awk并不提供函數(shù)功能,只有在nawk或較新的Unix awk版本中才可以增加函數(shù)。
函數(shù)的使用包含兩部分:函數(shù)的定義與函數(shù)調(diào)用。其中函數(shù)定義又包括要執(zhí)行的代碼(函數(shù)本身)和從主程序代碼傳遞到該函數(shù)的臨時調(diào)用。
Unix awk函數(shù)的定義方法如下:
function 函數(shù)名(參數(shù)表){函數(shù)體}
在gawk中允許將function省略為func,但其它版本的awk不允許。函數(shù)名必須是一個合法的標(biāo)志符,參數(shù)表中可以不提供參數(shù)(但在調(diào)用函數(shù)時函數(shù)名后的一對括號仍然是不可缺少的),也可以提供一個或多個參數(shù)。與C語言相似,awk的參數(shù)也是通過值來傳遞的。
在Unix awk中調(diào)用函數(shù)比較簡單,其方法與C語言相似,但Unix awk比C語言更為靈活,它不執(zhí)行參數(shù)有效性檢查。
換句話說,在你調(diào)用函數(shù)時,可以列出比函數(shù)預(yù)計(函數(shù)定義中規(guī)定)的多或少的參數(shù),多余的參數(shù)會被Unix awk所忽略,而不足的參數(shù),awk將它們置為缺省值0或空字符串,具體置為何值,將取決于參數(shù)的使用方式。
Unix awk函數(shù)有兩種返回方式:隱式返回和顯式返回。當(dāng)Unix awk執(zhí)行到函數(shù)的結(jié)尾時,它自動地返回到調(diào)用程序,這是函數(shù)是隱式返回的。如果需要在結(jié)束之前退出函數(shù),可以明確地使用返回語句提前退出。方法是在函數(shù)中使用形如:return 返回值 格式的語句。
例:下面的例子演示了函數(shù)的使用。在這個示例中,定義了一個名為print_header的函數(shù),該函數(shù)調(diào)用了兩個參數(shù)FileName和PageNum,F(xiàn)ileName參數(shù)傳給函數(shù)當(dāng)前使用的文件名,PageNum參數(shù)是當(dāng)前頁的頁號。這個函數(shù)的功能是打印(顯示)出當(dāng)前文件的文件名,和當(dāng)前頁的頁號。完成這個功能后,這個函數(shù)將返回下一頁的頁號。
- nawk
- 'BEGIN{pageno=1;file=FILENAME
- pageno=print_header(file,pageno);#調(diào)用函數(shù)print_header
- printf("當(dāng)前頁頁號是:%d ",pageno);
- }
- #定義函數(shù)print_header
- function print_header(FileName,PageNum){
- printf("%s %d ",FileName,PageNum); >PageNum++;return PageNUm;
- }
- }' myfile
執(zhí)行這個程序?qū)@示如下內(nèi)容:
myfile 1
當(dāng)前頁頁號是:2
Unix awk中的自定義函數(shù)的知識,我們就講解到這里了。
【編輯推薦】