我写了一个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函数中使用它。谢谢。
答案 0 :(得分:3)
变量和数组在AWK中是全局的。变量局部变为局部的唯一方法是在参数列表中命名它们(即使没有为所有参数传入值。因此,为了避免创建局部数组,请不要在参数列表中包含它的名称。
来自gawk
手册:
参数名称在语法上与本地名称不同 变量名。相反,当提供的参数数量 函数被调用确定有多少参数变量。 因此,如果给出三个参数值,则前三个名称 PARAMETER-LIST是参数,其余是局部变量。
如果参数的数量不相同则如下 调用该函数,PARAMETER-LIST中的一些名称可能是 某些情况下的参数和其他情况下的局部变量。其他方式 想到这就是省略的参数默认为空字符串。
通常在编写函数时,您知道自己有多少名字 打算用于参数以及您打算将多少用作本地参数 变量。通常在它之间放置一些额外的空间 参数和局部变量,以便记录你的 应该使用函数。