Unix awk的流程控制BEGIN和END的講解
你可能對(duì)Unix比較熟悉,但你可能對(duì)Unix awk很陌生,這一點(diǎn)也不奇怪,的確,與其優(yōu)秀的功能相比,awk還遠(yuǎn)沒(méi)達(dá)到它應(yīng)有的知名度。
流程控制語(yǔ)句是任何程序設(shè)計(jì)語(yǔ)言都不能缺少的部分。任何好的語(yǔ)言都有一些執(zhí)行流程控制的語(yǔ)句。Unix awk提供的完備的流程控制語(yǔ)句類(lèi)似于C語(yǔ)言,這給我們編程帶來(lái)了極大的方便。
BEGIN和END:
在Unix awk中兩個(gè)特別的表達(dá)式,BEGIN和END,這兩者都可用于pattern中(參考前面的awk語(yǔ)法),提供BEGIN和END的作用是給程序賦予初始狀態(tài)和在程序結(jié)束之后執(zhí)行一些掃尾的工作。
任何在BEGIN之后列出的操作(在{}內(nèi))將在Unix awk開(kāi)始掃描輸入之前執(zhí)行,而END之后列出的操作將在掃描完全部的輸入之后執(zhí)行。因此,通常使用BEGIN來(lái)顯示變量和預(yù)置(初始化)變量,使用END來(lái)輸出最終結(jié)果。
例:累計(jì)銷(xiāo)售文件xs中的銷(xiāo)售金額(假設(shè)銷(xiāo)售金額在記錄的第三字段):
$awk
'BEGIN { FS=":";print "統(tǒng)計(jì)銷(xiāo)售金額";total=0}
{print $3;total=total+$3;}
END {printf "銷(xiāo)售金額總計(jì):%.2f",total}' sx
(注:>是shell提供的第二提示符,如要在shell程序Unix awk語(yǔ)句和Unix awk語(yǔ)言中換行,則需在行尾加反斜杠)
在這里,BEGIN預(yù)置了內(nèi)部變量FS(字段分隔符)和自定義變量total,同時(shí)在掃描之前顯示出輸出行頭。而END則在掃描完成后打印出總合計(jì)。
【編輯推薦】

























