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