AWK工作流程


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

AWK Workflow

讀取

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命令。這個過程不斷重複,直到檔案被耗盡。