我的 awk 用户函数在 bash 脚本中不起作用
My awk user function isn't working in a bash script
我正在尝试以非管理员用户的身份在 ubuntu 中编写一个 awk 脚本。它需要四个终端语句并将它们放入变量中。然后将这些变量发送到我创建的函数,它吐出一个平均数并打印出来。
这是我的脚本:
#!/usr/bin/gawk -f
BEGIN{
one = ARGV[1];
two = ARGV[2];
three = ARGV[3];
four = ARGV[4];
function average_funct(one, two, three, four)
{
total = one + two;
total = total + three;
total = total + four;
average = total / 4;
return average;
}
print("The average of these numbers is " average_funct(one, two, three, four));
}
到运行它我一直在用这个:
./myaverage4 2 7 4 3
导致此错误消息的结果:
gawk: ./myaverage4:9: function average_funct(one, two, three, four)
gawk: ./myaverage4:9: ^ syntax error
gawk: ./myaverage4:15: return average;
gawk: ./myaverage4:15: ^ `return' used outside function context
如果有人能帮我解决这个问题那就太棒了。
您不能在 BEGIN 部分或任何其他操作块中声明函数。将其移出所有操作块。
function foo() { ... }
BEGIN { foo() }
我假设您有一些理由按照您的方式编写代码,而不是更明显和适应任何数量参数的方式:
function average_funct(arr, total, cnt)
{
for (cnt=1; cnt in arr; cnt++) {
total += arr[cnt]
}
return (--cnt ? total / cnt : 0)
}
BEGIN {
print "The average of these numbers is", average_funct(ARGV)
}
我正在尝试以非管理员用户的身份在 ubuntu 中编写一个 awk 脚本。它需要四个终端语句并将它们放入变量中。然后将这些变量发送到我创建的函数,它吐出一个平均数并打印出来。
这是我的脚本:
#!/usr/bin/gawk -f
BEGIN{
one = ARGV[1];
two = ARGV[2];
three = ARGV[3];
four = ARGV[4];
function average_funct(one, two, three, four)
{
total = one + two;
total = total + three;
total = total + four;
average = total / 4;
return average;
}
print("The average of these numbers is " average_funct(one, two, three, four));
}
到运行它我一直在用这个:
./myaverage4 2 7 4 3
导致此错误消息的结果:
gawk: ./myaverage4:9: function average_funct(one, two, three, four)
gawk: ./myaverage4:9: ^ syntax error
gawk: ./myaverage4:15: return average;
gawk: ./myaverage4:15: ^ `return' used outside function context
如果有人能帮我解决这个问题那就太棒了。
您不能在 BEGIN 部分或任何其他操作块中声明函数。将其移出所有操作块。
function foo() { ... }
BEGIN { foo() }
我假设您有一些理由按照您的方式编写代码,而不是更明显和适应任何数量参数的方式:
function average_funct(arr, total, cnt)
{
for (cnt=1; cnt in arr; cnt++) {
total += arr[cnt]
}
return (--cnt ? total / cnt : 0)
}
BEGIN {
print "The average of these numbers is", average_funct(ARGV)
}