next up previous contents
Next: 基本控制語法 Up: 變數與欄位處理 Previous: awk變數與shell變數   Contents

陣列Array與split函數

所有awk的array都是associate array,也就是hash,也就是帶有名字id的陣列。 這個名字id就是hash的key。一般我們用1, 2 ,3 ...來當作陣列的id註標,在 awk裡面允許我們用名稱來當id index來搜尋陣列。不過awk很聰明如果看到是數 字型的index也可以像在C裡面用的一樣。

注意!陣列從array[1]開始,不是從array[0]開始,跟c不一樣。 我們可以指定x[1], x[2]...的陣列照1,2,3 ...排列順序, 但associate array的排列不是我們可以控制的。注意associate array的注標要用 引號括起來,請看for loop的用法。

可以用split(string, array, [sep])來得到一個陣列,sep沒有給就用FS的值當做 這個string的欄位分隔,一個欄位就是一個陣列元素。
    $ cat split.awk
    #! /bin/awk
    BEGIN{FS=":"}
    /cyril/{
        print $0
        split($0, afield)
        for (i = 0; i < NF; ++i) { 
            print i","afield[i]
        }
        
        delete afield[2]

        for (i = 0; i <= NF; ++i) {
            print i","afield[i]
        }
    }

    $ awk -f split.awk /etc/passwd
    lcyril:x:100:1::/export/lcyril:/usr/bin/bash
    0,
    1,lcyril
    2,x
    3,100
    4,1
    5,
    6,/export/lcyril
    7,/usr/bin/bash
    0,
    1,lcyril
    2,
    3,100
    4,1
    5,
    6,/export/lcyril
    7,/usr/bin/bash



Cyril Huang 2002-06-14