你可能對Unix比較熟悉,但你可能對Unix awk很陌生,這一點也不奇怪,的確,與其優秀的功能相比,awk還遠沒達到它應有的知名度。shell
流程控制語句是任何程序設計語言都不能缺乏的部分。任何好的語言都有一些執行流程控制的語句。Unix awk提供的完備的流程控制語句相似於C語言,這給咱們編程帶來了極大的方便。編程
BEGIN和END:ide
在Unix awk中兩個特別的表達式,BEGIN和END,這二者均可用於pattern中(參考前面的awk語法),提供BEGIN和END的做用是給程序賦予初始狀態和在程序結束以後執行一些掃尾的工做。設計
任何在BEGIN以後列出的操做(在{}內)將在Unix awk開始掃描輸入以前執行,而END以後列出的操做將在掃描徹底部的輸入以後執行。所以,一般使用BEGIN來顯示變量和預置(初始化)變量,使用END來輸出最終結果。code
例:累計銷售文件xs中的銷售金額(假設銷售金額在記錄的第三字段):
$```
awk
'BEGIN { FS=":";print "統計銷售金額";total=0}
{print $3;total=total+$3;}
END {printf "銷售金額總計:%.2f",total}' sxit
例2:容量字段累加
grep '19/03/12 22:' nohup.out| grep Successfully|awk '{print $9}' | awk -F= '{j=j+$2} END {i=j/1024/1024/1024;print j,i}'
846835162645 788.677程序設計
(注:>是shell提供的第二提示符,如要在shell程序Unix awk語句和Unix awk語言中換行,則需在行尾加反斜槓) 在這裏,BEGIN預置了內部變量FS(字段分隔符)和自定義變量total,同時在掃描以前顯示出輸出行頭。而END則在掃描完成後打印出總合計。