跳转至内容

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

华夏公益教科书