awk中自訂函數 定義和調用使用者自己的函數是幾乎每個進階語言都具有的功能,awk也不例外,但原始的awk並不提供函數功能,只有在nawk或較新的awk版本中才可以增加函數。 函數的使用包含兩部分:函數的定義與函數調用。其中函數定義又包括要執行的代碼(函數本身)和從主程式碼傳遞到該函數的臨時調用。awk函數的定義方法如下: function 函數名(參數表){ 函數體 } 在gawk中允許將function省略為func,但其它版本的awk不允許。函數名必須是一個合法的標誌符,參數表中可以不提供參數(但在調用函數時函數名後的一對括弧仍然是不可缺少的),也可以提供一個或多個參數。與C語言相似,awk的參數也是通過值來傳遞的。 在 awk 中調用函數比較簡單,其方法與C語言相似,但awk比C語言更為靈活,它不執行參數有效性檢查。換句話說,在你調用函數時,可以列出比函數預計(函數定義中規定)的多或少的參數,多餘的參數會被awk所忽略,而不足的參數,awk將它們置為預設值0或Null 字元串,具體置為何值,將取決於參數的使用方式。 awk函數有兩種返回方式:隱式返回和顯式返回。當awk執行到函數的結尾時,它自動地返回到調用程式,這是函數是隱式返回的。如果需要在結束之前退出函數,可以明確地使用返回語句提前退出。方法是在函數中使用形如:return 傳回值 格式的語句。 例:下面的例子示範了函數的使用。在這個樣本中,定義了一個名為print_header的函數,該函數調用了兩個參數FileName和 PageNum, FileName參數傳給函數當前使用的檔案名稱,PageNum參數是當前頁的頁號。這個函數的功能是列印(顯示)出當前檔案的檔案名稱,和當前頁的頁號。完成這個功能後,這個函數將返回下一頁的頁號。 nawk >'BEGIN{pageno=1;file=FILENAME >pageno=print_header(file,pageno);#調用函數print_header >printf("當前頁頁號是:%d\n",pageno); >} >#定義函數print_header >function print_header(FileName,PageNum){ >printf("%s %d\n",FileName,PageNum); >PageNum++;return PageNUm; >} >}' myfile 執行這個程式將顯示如下內容: myfile 1 當前頁頁號是:2