我的代码1:
awk -F'|' -v PARM_VAL="${PARM_VALUE[*]}" '
BEGIN { split(PARM_VAL,pa," ")
fn_1()
{
print "inside fn"
}
}
FNR==NR{ for(i=1;i<=NF;i++) a[NR,i]=$i; }
{if (FILENAME == "SPP_OUT") {print $1}}
fn_1
END {printf " second value of SPPIN : "a[2,2]} ' SPP_IN SPP_OUT
我收到错误致命:函数`fn_1'未定义
我的代码2:
awk -F'|' -v PARM_VAL="${PARM_VALUE[*]}" '
BEGIN { split(PARM_VAL,pa," ")
fn_1()
{
ret = "returned"
return ret
}
}
FNR==NR{ for(i=1;i<=NF;i++) a[NR,i]=$i; }
{if (FILENAME == "SPP_OUT") {print $1}}
m=fn_1()
END {printf " second value of SPPIN : "a[2,2];print $m} ' SPP_IN SPP_OUT
我正面对 awk:cmd。第6行:返回ret awk:cmd。 line:6:^`return'在函数上下文中使用
任何助手都可以吗? 感谢
答案 0 :(得分:3)
应该在BEGIN
块之外定义该函数。例如:
$ cat function.awk
function fib(n, n_1, n_2)
{
if (n < 2) {
return n
} else {
n_1 = fib(n - 1)
n_2 = fib(n - 2)
return n_1 + n_2
}
}
BEGIN {
for (i = 0; i < 5; ++i) {
printf("fib(%d) = %d\n", i, fib(i));
}
}
$ awk -f function.awk
fib(0) = 0
fib(1) = 1
fib(2) = 1
fib(3) = 2
fib(4) = 3
$
用户定义的awk
函数语法为
function NAME(PARAMETER-LIST)
{
BODY-OF-FUNCTION
}
棘手的部分是:
PARAMETER-LIST是函数的参数和局部变量的列表 名称,以逗号分隔。调用函数时,参数 名称用于保存调用中给出的参数值。的的 局部变量初始化为空字符串。一个功能不能 有两个具有相同名称的参数,也可能没有参数 与函数本身同名。
有关详细信息,请参阅awk manual。
答案 1 :(得分:2)
为了使代码的核心工作,我必须在定义函数时添加function
关键字,并在进行调用时添加括号:
$ cat foo.awk
BEGIN { print "begin" }
function fn_1()
{
print "inside fn"
}
{
fn_1()
}
END { print "end" }
$ echo 'xyz' | awk -f foo.awk
begin
inside fn
end
来自awk手册:
名为name的函数的定义如下所示:
功能名称(参数列表)
{
身体的功能
}