在awk中全局声明数组

时间:2012-07-19 23:09:22

标签: shell awk

我写了一个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语句中访问数组和array1内容。我怀疑阵列1和数组2是否在函数内部声明。如果它是本地阵列。我只需要知道如何将其作为全局数组,以便我能够在END函数中使用它。谢谢。

1 个答案:

答案 0 :(得分:3)

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

来自gawk手册:

  

参数名称在语法上与本地名称不同   变量名。相反,当提供的参数数量   函数被调用确定有多少参数变量。   因此,如果给出三个参数值,则前三个名称   PARAMETER-LIST是参数,其余是局部变量。

     

如果参数的数量不相同则如下   调用该函数,PARAMETER-LIST中的一些名称可能是   某些情况下的参数和其他情况下的局部变量。其他方式   想到这就是省略的参数默认为空字符串。

     

通常在编写函数时,您知道自己有多少名字   打算用于参数以及您打算将多少用作本地参数   变量。通常在它之间放置一些额外的空间   参数和局部变量,以便记录你的   应该使用函数。