Awk Primer/使用者定義函式
外觀
Awk 支援使用者定義函式。
函式定義在模式和操作之外指定,如下所示
function <name>(<comma-separated list of parameters>) { <actions> }
例如,以下程式針對每條記錄列印其前兩個欄位的平方和
function print_sumsq(x, y) {print x*x+y*y}
NF>=2 {print_sumsq($1, $2)}
函式名和左括號之間不應包含任何中間空格。這僅適用於使用者定義函式,其目的是避免與連線運算子混淆
function print_sumsq(x, y) {print x*x+y*y}
NF>=2 {print_sumsq($1, $2)} # Correct
NF>=2 {print_sumsq ($1, $2)} # Incorrect
NF>=2 {print(atan2($1, $2))} # Correct
NF>=2 {print(atan2 ($1, $2))} # Correct, as atan2 is not a user-defined function
為了返回值,請使用 return 語句
function sumsq(x, y) {return x*x+y*y}
NF>=2 {print(sumsq($1, $2))}
為了使用區域性變數,應在引數列表的末尾指定它們,但不應在函式呼叫中指定
function sumsq(x, y, u, v) {u=x*x; v=y*y; return u+v} # u, v are local
NF>=2 {print(sumsq($1, $2))}
根據約定,區域性變數透過額外的空格與引數分開。
作為 GAWK 擴充套件,有一個間接函式呼叫。如下所示
@<a variable whose value is a function name>(comma-separated list of parameters>)
示例
function print_sumsq(x, y) {print x*x+y*y}
BEGIN {myfun="print_sumsq"}
NF>=2 {@myfun($1, $2)}