AWK 中的字符串是否被视为数组?

Are strings in AWK treated as arrays?

我是 awk/gawk 的新手,我发现这有点令人困惑。我希望你能帮助我阐明这个问题:Are strings in awk treated as array of chars?

我读过一些关于这种计算语言的严格性的文章,所以我尝试制作这样的脚本:

BEGIN {
   myArray[1] = "foo"
   myArray[2] = "bar"
   myArray[3] = 42

   awkward()
}

function awkward() {
    for (j in myArray) {
        for (d in myArray[j]) {
            # error!
        }
    }
}

我是不是天真地认为这样的事情可行?它实际上不适用于我的 gawk 版本,给我这个错误:

for (d in myArray[j]) {
                 ^ syntax error

任何人都可以帮助我更多地了解为什么这不起作用吗?奖励:任何人都可以分享他们的解决方法吗?


为了澄清一点,我试图通过索引 d.

上的 for 循环逐个访问 myArray[j] 字符的内容

不,awk 中的字符串不被视为字符数组。使用 substr():

$ cat foo.awk
BEGIN {
   myArray[1] = "foo"
   myArray[2] = "bar"
   myArray[3] = 42

   awkward()
}

function awkward() {
    for (j in myArray) {
        for (i=1;i<=length(myArray[j]);i++) {  # here
            print substr(myArray[j],i,1)       # and here
        }
    }
}

运行它:

$ awk -f foo.awk
f
o
o
b
a
r
4
2