0

我写了一个 awk 脚本,现在我正在对其进行模块化。我将仅举一个简单的例子来说明我所做的事情。

awk 
BEGIN
{
     declaring local variables 
}

{
      if(variable==A)
      {
            array[A]++;
            array1[A]++;
      }

}
END
{
      print contents of array and array1
}

我想使用函数来做下面的事情,我只是在编辑动作块,即

{
      addArrays(A);
}

function addArrays(A)
{
       array[A]++;
       array1[A]++;
}

如果我这样做,我只想知道是否可以在 END 语句中访问 array 和 array1 的内容。我的疑问是数组 1 和数组 2 是否在函数内部本地声明。如果它是一个本地数组。我只需要知道如何将它作为一个全局数组,以便我能够在 END 函数中使用它。谢谢你。

4

1 回答 1

4

变量和数组在 AWK 中是全局的。使变量成为本地变量的唯一方法是在参数列表中命名它们(即使没有为所有参数传入值。因此,为避免创建本地数组,不要将其名称包含在参数列表中。

gawk手册:

参数名称在语法上与局部变量名称没有区别。相反,调用函数时提供的参数数量决定了有多少参数变量。因此,如果给定三个参数值,则 PARAMETER-LIST 中的前三个名称是参数,其余的是局部变量。

因此,如果在对函数的所有调用中参数的数量不相同,则 PARAMETER-LIST 中的某些名称在某些情况下可能是参数,而在其他情况下可能是局部变量。另一种思考方式是省略的参数默认为空字符串。

通常,当您编写函数时,您会知道要使用多少个名称作为参数以及要使用多少个名称作为局部变量。通常在参数和局部变量之间放置一些额外的空间,以记录您的函数应该如何使用。

于 2012-07-19T23:19:00.120 回答