我有以下 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
。
split(s, a, fs)
将字符串拆分s
为数组元素a[1]
,a[2]
, ...,a[n]
并返回n
。
因此,要成对访问数组的元素,您应该以2 为步长从1
到循环,并在每次迭代中访问元素和。n - 1
i
i+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
,因此您的循环是正确的。