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