awk 中的数组索引

Ver*_*era -1 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]
        }
     }
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 6

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

来自BSD 系统的文档

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

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

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

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