next up previous contents
Next: 其他函數 Up: awk Previous: while   Contents

function

跟c不太一樣的,這是一種script,不用甚麼type要宣告,也沒有什麼 pass by value, pass by address,變數是global的。
    # 通式
    function fun(arg1, arg2) {
            arg1 = arg2
            xxxx
    }

    排序的例子
    $ cat sort.awk
    # sorting function
    function sort(Array, elements, temp, i,j)
        for (i = 2; i<= elements; ++i) {
            for(j = i; array[j - 1] > array[j]; --j) {
                temp = array[j]
                array[j] = array[j - 1]
                array[j - 1] = temp
            }
        }
        return 
    }
    # main routine, 一行一行來
    {
    for (i = 2; i <= NF; ++i) {
         grades[i - 1] = $i
    }
    sort(grades, NF-1)
    printf("%s: ", $1)
    for (j = 1; j <= NF - 1; ++j) {
        printf("%d ", grades[j])
    }
    printf("\n")
    }

    $ cat grade.txt
    西西  100 60 75 23
    美美  100 98 99 89

    $ awk -f sort.awk grade.txt
    西西: 23 60 75 100 
    美美: 89 98 99 100



Cyril Huang 2002-06-14