Linux 教程
本篇文章我們主要為大家介紹 AWK 是如何工作的。
AWK 工作流程可分為三個(gè)部分:
命令結(jié)構(gòu):
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
下面的流程圖描述出了 AWK 的工作流程:
開(kāi)始?jí)K的語(yǔ)法格式如下:
BEGIN {awk-commands}
開(kāi)始?jí)K就是在程序啟動(dòng)的時(shí)候執(zhí)行的代碼部分,并且它在整個(gè)過(guò)程中只執(zhí)行一次。
一般情況下,我們可以在開(kāi)始?jí)K中初始化一些變量。
BEGIN 是 AWK 的關(guān)鍵字,因此它必須是大寫(xiě)的。
注意:開(kāi)始?jí)K部分是可選的,你的程序可以沒(méi)有開(kāi)始?jí)K部分。
主體部分的語(yǔ)法格式如下:
/pattern/ {awk-commands}
對(duì)于每一個(gè)輸入的行都會(huì)執(zhí)行一次主體部分的命令。
默認(rèn)情況下,對(duì)于輸入的每一行,AWK 都會(huì)執(zhí)行命令。但是,我們可以將其限定在指定的模式中。
注意:在主體塊部分沒(méi)有關(guān)鍵字存在。
結(jié)束塊的語(yǔ)法格式如下:
END {awk-commands}
結(jié)束塊是在程序結(jié)束時(shí)執(zhí)行的代碼。 END 也是 AWK 的關(guān)鍵字,它也必須大寫(xiě)。 與開(kāi)始?jí)K相似,結(jié)束塊也是可選的。
先創(chuàng)建一個(gè)名為 marks.txt 的文件。其中包括序列號(hào)、學(xué)生名字、課程名稱(chēng)與所得分?jǐn)?shù)。
1) 張三 語(yǔ)文 80 2) 李四 數(shù)學(xué) 90 3) 王五 英語(yǔ) 87
接下來(lái),我們將使用 AWK 腳本來(lái)顯示輸出文件中的內(nèi)容,同時(shí)輸出表頭信息。
$ awk 'BEGIN{printf "序號(hào)t名字t課程t分?jǐn)?shù)n"} {print}' marks.txt
執(zhí)行以上命令,輸出結(jié)果如下:
序號(hào)????名字????課程????分?jǐn)?shù) 1) 張三 語(yǔ)文 80 2) 李四 數(shù)學(xué) 90 3) 王五 英語(yǔ) 87
程序開(kāi)始執(zhí)行時(shí),AWK 在開(kāi)始?jí)K中輸出表頭信息。在主體塊中,AWK 每讀入一行就將讀入的內(nèi)容輸出至標(biāo)準(zhǔn)輸出流中,一直到整個(gè)文件被全部讀入為止。