awk의 배열 인덱싱

awk의 배열 인덱싱

kaggr배열을 생성 한 다음 값을 knamsum 에 저장하는 다음 awk 코드가 있습니다 knum. 루프는 처음부터 시작하는 것이 아니라 1처음부터 시작해야 한다는 인상을 받았지만 작동하는 것 같습니다 0. for ( i=1; i<n; i+=2 )awk 배열은 index 에서 시작해야 하므로 0index 에서 시작할 때 모든 것이 괜찮습니까 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]및 return 으로 분할합니다 n.

따라서 쌍으로 배열 요소에 액세스하려면 2단계로 from to를 반복 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루프가 정확합니다.

관련 정보