本章將介紹AWK究竟如何工作的。成為一個專家AWK程式員,需要知道它的內部流程。 AWK遵循一個簡單的工作流程:讀取,執行和重複。下圖描述了工作流程。
AWK從輸入流(檔案,管道,或標準輸入)讀取一行,並將其儲存在儲存器(記憶體)中。
所有的AWK命令依次提交輸入。預設情況下AWK執行命令每一行,但我們可以通過提供的模式限制。
重複這個過程,直到該檔案被處理完成。
我們已經看到了AWK程式的工作流程。現在來了解AKW程式的結構。
以下是BEGIN塊語法:
BEGIN {awk-commands}
在BEGIN塊被在程式啟動時執行,且只執行一次。這是一個很好的初始化變數的地方。 BEGIN是AWK關鍵字,因此它必須是大寫。請注意,這個塊是可選的。
以下是主體(Body)塊的語法:
/pattern/ {awk-commands}
主體塊適用於AWK的每個輸入行命令。預設情況下AWK執行每一行命令,但可以通過提供的模式限制。請注意,沒有主體塊的關鍵字。
以下是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命令。這個過程不斷重複,直到檔案被耗盡。