awk 中的数组索引

awk 中的数组索引

我有以下 awk 代码,它创建数组kaggr,然后将值存储在knam和中knum。印象中循环不应该从 开始1,而是从 开始0,但for ( i=1; i<n; i+=2 )似乎有效。 awk 数组应该从索引开始0,那么从索引开始时一切正常吗1

awk 'BEGIN { kl=0
       "tput sgr0" |& getline rst
       ks = "Wht 15 Grn 34 Blu 39 Ylw 11 Red 196 Amb 214"
       n = split(ks, kaggr)
       for ( i=1; i<n; i+=2 ) {
         knam = kaggr[i] ":"
         knum = kaggr[i+1]
        }
     }

答案1

split()当您使用in拆分字符串时awk,您会得到一个索引从 开始的数组1

BSD 系统的文档:

split(s, a, fs)
将字符串拆分s为数组元素a[1], a[2], ...,a[n]并返回n

因此,要成对访问数组的元素,您应该以2 为步长从1到循环,并在每次迭代中访问元素和。n - 1ii+1

n = split(string, a)
for (i = 1; i <= n - 1; i += 2) {
    # use a[i] and a[i+1]
}

显然,i <= n - 1与 相同i < n,因此您的循环是正确的。

相关内容