awk中两个特别的表达式,BEGIN和END。
这两者都可用于pattern中,提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。
任何在BEGIN之后列出的操作(在{}内)将在读取输入的行之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,BEGIN 和 END 可以这样区分:
- 通常使用BEGIN在循环文件之前设置变量;
- 使用END来输出最终结果。
例如:
awk
'BEGIN {print "统计销售金额";total=0} # 输出提示语"统计销售金额",并设置total变量为0
{print $3;total=total+$3;} # 逐行扫描文件
END {print "销售金额总计",total}' file.txt # 在扫描文件之后执行,打印total变量
因此,如果只想赋值一次、打印变量或文本一次,就在BEGIN 或 END中写。
如果想要循环多少行就打印多少次,就不要在BEGIN 或 END中写,这也是awk的常规用法,如:
awk '{print $1}' file.txt
实际上,上面这一行代码的意思是:读取第一行时打印第一列的值、读取第二行时打印第二列的值......以此类推,有多少行就循环多少次,最终的效果就是打印出这个文件的完整第一列出来。