AWK工作流程

本章將介紹AWK究竟如何工作的。成爲一個專家AWK程序員,需要知道它的內部流程。 AWK遵循一個簡單的工作流程:讀取,執行和重複。下圖描述了工作流程。

AWK

讀取

AWK從輸入流(文件,管道,或標準輸入)讀取一行,並將其存儲在存儲器(內存)中。

執行

所有的AWK命令依次提交輸入。默認情況下AWK執行命令每一行,但我們可以通過提供的模式限制。

重複

重複這個過程,直到該文件被處理完成。

程序結構

我們已經看到了AWK程序的工作流程。現在來了解AKW程序的結構。

BEGIN 塊

以下是BEGIN塊語法:

BEGIN {awk-commands}

在BEGIN塊被在程序啓動時執行,且只執行一次。這是一個很好的初始化變量的地方。 BEGIN是AWK關鍵字,因此它必須是大寫。請注意,這個塊是可選的。

Body塊

以下是主體(Body)塊的語法:

/pattern/ {awk-commands}

主體塊適用於AWK的每個輸入行命令。默認情況下AWK執行每一行命令,但可以通過提供的模式限制。請注意,沒有主體塊的關鍵字。

END 塊

以下是END塊的語法:

END {awk-commands}

END塊被在程序結束時執行。END是AWK關鍵字,因此它必須是大寫。請注意,此塊也是可選的。

示例

讓創建一個包含序列號的學生,名字,科目並標記數量,文件的名稱爲:marks.txt。

1)    Amit     Physics    80
2)    Rahul    Maths      90
3)    Shyam    Biology    87
4)    Kedar    English    85
5)    Hari     History    89

現在用AWK腳本顯示包含頭文件的內容。

[jerry]$ awk 'BEGIN{printf "Sr No\tName\tSub\tMarks\n"} {print}' marks.txt

當執行上面的代碼時,會產生以下結果。

Sr No Name     Sub        Marks
1)    Amit     Physics    80
2)    Rahul    Maths      90
3)    Shyam    Biology    87
4)    Kedar    English    85
5)    Hari     History    89

在程序啓動時AWK從BEGIN塊頭打印。然後,在主體塊時,它從一個文件讀取一行,並執行打印標準輸出流的內容,使用AWK的printf命令。這個過程不斷重複,直到文件被耗盡。