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