跳轉至內容

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)}

華夏公益教科書