awkの配列インデックス

awkの配列インデックス

kaggr配列を作成し、値をknamsumに保存する次のawkコードがありますknum。ループは最初から始めるのではなく、1最初から始めなければならないという印象を受けましたが、うまくいくようです0for ( 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ループは正確です。

関連情報