如何在awk中声明数组

3

我已经使用awk编写了一个脚本。我想知道如何在awk中声明一个数组

我已经阅读了gnu awk手册,但没有找到有关声明的内容。

我想测试索引ind是否在awk数组arr中。

echo 'awk' | awk 'BEGIN {arr} {if ('1' in arr) arr[ind] = 1}'

我之前没有将arr声明为数组,运行这段代码在awk中会出现这样的错误。
awk: cmd. line:1: (FILENAME=- FNR=1) fatal: attempt to use scalar `arr' as an array

2
在awk中不需要声明数组。只需将值放入其中,例如arr[1] = 5,并通过arr[index]来访问它们。更多细节请参考此链接:http://www.chemie.fu-berlin.de/chemnet/use/info/gawk/gawk_12.html - ramana_k
2个回答

10

您可以使用delete语句声明一个空数组:

BEGIN { delete arr[0] }
END { 
    print "len", length(arr)
    if ("1" in arr) {
        print "astonishing"
    }
}

你能用gawk的多维数组来实现这个吗?我想说arr["people"]是一个数组,但是我还没有找到方法来实现arr["people"]["dummy"]++;delete arr["people"]["dummy"] - unhammer
1
根据awk的手册,注意:“注意:为了在gawk期望数组的地方使用它(例如在split()的第二个参数中),您可能需要告诉gawk一个数组元素实际上是一个子数组。您可以通过在子数组中创建一个元素,然后使用delete语句将其删除来实现这一点。” - FrankL
哈哈!有点可悲,但没关系。谢谢提供参考。 - unhammer

3
您在BEGIN块中的初始'arr'数组被“声明”为标量,这使得awk感到困惑。只需移除该声明即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接