我有以下 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)
split()当您使用in拆分字符串时awk,您会得到一个索引从 开始的数组1。
来自BSD 系统的文档:
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]
}
Run Code Online (Sandbox Code Playgroud)
显然,i <= n - 1与 相同i < n,因此您的循环是正确的。