鍍金池/ 教程/ Linux/ AWK工作流程
AWK環(huán)境安裝配置
AWK格式化打印
Awk教程
AWK控制流
AWK循環(huán)
AWK用戶自定義函數(shù)
AWK工作流程
AWK數(shù)組
AWK基本語法
AWK基本示例
AWK運(yùn)算符
AWK內(nèi)置函數(shù)
AWK內(nèi)置變量
AWK輸出重定向
AWK正則表達(dá)式

AWK工作流程

本章將介紹AWK究竟如何工作的。成為一個(gè)專家AWK程序員,需要知道它的內(nèi)部流程。 AWK遵循一個(gè)簡單的工作流程:讀取,執(zhí)行和重復(fù)。下圖描述了工作流程。

AWK Workflow

讀取

AWK從輸入流(文件,管道,或標(biāo)準(zhǔn)輸入)讀取一行,并將其存儲在存儲器(內(nèi)存)中。

執(zhí)行

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

重復(fù)

重復(fù)這個(gè)過程,直到該文件被處理完成。

程序結(jié)構(gòu)

我們已經(jīng)看到了AWK程序的工作流程?,F(xiàn)在來了解AKW程序的結(jié)構(gòu)。

BEGIN 塊

以下是BEGIN塊語法:

BEGIN {awk-commands}

在BEGIN塊被在程序啟動(dòng)時(shí)執(zhí)行,且只執(zhí)行一次。這是一個(gè)很好的初始化變量的地方。 BEGIN是AWK關(guān)鍵字,因此它必須是大寫。請注意,這個(gè)塊是可選的。

Body塊

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

/pattern/ {awk-commands}

主體塊適用于AWK的每個(gè)輸入行命令。默認(rèn)情況下AWK執(zhí)行每一行命令,但可以通過提供的模式限制。請注意,沒有主體塊的關(guān)鍵字。

END 塊

以下是END塊的語法:

END {awk-commands}

END塊被在程序結(jié)束時(shí)執(zhí)行。END是AWK關(guān)鍵字,因此它必須是大寫。請注意,此塊也是可選的。

示例

讓創(chuàng)建一個(gè)包含序列號的學(xué)生,名字,科目并標(biāo)記數(shù)量,文件的名稱為:marks.txt。

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

現(xiàn)在用AWK腳本顯示包含頭文件的內(nèi)容。

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

當(dāng)執(zhí)行上面的代碼時(shí),會(huì)產(chǎn)生以下結(jié)果。

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

在程序啟動(dòng)時(shí)AWK從BEGIN塊頭打印。然后,在主體塊時(shí),它從一個(gè)文件讀取一行,并執(zhí)行打印標(biāo)準(zhǔn)輸出流的內(nèi)容,使用AWK的printf命令。這個(gè)過程不斷重復(fù),直到文件被耗盡。