awk的BEGIN和END

你可能对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则在扫描完成后打印出总合计。
相关文章
相关标签/搜索