中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

AWK 工作原理

本篇文章我們主要為大家介紹 AWK 是如何工作的。

AWK 工作流程可分為三個(gè)部分:

  • 讀輸入文件之前執(zhí)行的代碼段(由BEGIN關(guān)鍵字標(biāo)識(shí))。
  • 主循環(huán)執(zhí)行輸入文件的代碼段。
  • 讀輸入文件之后的代碼段(由END關(guān)鍵字標(biāo)識(shí))。

命令結(jié)構(gòu):

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

下面的流程圖描述出了 AWK 的工作流程:

  • 1、通過(guò)關(guān)鍵字 BEGIN 執(zhí)行 BEGIN 塊的內(nèi)容,即 BEGIN 后花括號(hào) {} 的內(nèi)容。
  • 2、完成 BEGIN 塊的執(zhí)行,開(kāi)始執(zhí)行body塊。
  • 3、讀入有 n 換行符分割的記錄。
  • 4、將記錄按指定的域分隔符劃分域,填充域,$0 則表示所有域(即一行內(nèi)容),$1 表示第一個(gè)域,$n 表示第 n 個(gè)域。
  • 5、依次執(zhí)行各 BODY 塊,pattern 部分匹配該行內(nèi)容成功后,才會(huì)執(zhí)行 awk-commands 的內(nèi)容。
  • 6、循環(huán)讀取并執(zhí)行各行直到文件結(jié)束,完成body塊執(zhí)行。
  • 7、開(kāi)始 END 塊執(zhí)行,END 塊可以輸出最終結(jié)果。

開(kāi)始?jí)K(BEGIN)

開(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部分。

主體塊(BODY)

主體部分的語(yǔ)法格式如下:

/pattern/ {awk-commands}

對(duì)于每一個(gè)輸入的行都會(huì)執(zhí)行一次主體部分的命令。

默認(rèn)情況下,對(duì)于輸入的每一行,AWK 都會(huì)執(zhí)行命令。但是,我們可以將其限定在指定的模式中。

注意:在主體塊部分沒(méi)有關(guān)鍵字存在。

結(jié)束塊(END)

結(jié)束塊的語(yǔ)法格式如下:

END {awk-commands}

結(jié)束塊是在程序結(jié)束時(shí)執(zhí)行的代碼。 END 也是 AWK 的關(guān)鍵字,它也必須大寫(xiě)。 與開(kāi)始?jí)K相似,結(jié)束塊也是可選的。

實(shí)例

先創(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è)文件被全部讀入為止。