BEGIN和END语句块

Posted liujunjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BEGIN和END语句块相关的知识,希望对你有一定的参考价值。

awk的所有代码(目前这么认为)都是写在语句块中的。

例如

[root@docker-01 ~]# awk {print $0} a.txt
[root@docker-01 ~]# awk {print $0}{print $0;print $0} a.txt

每个语句块前面可以有pattern,所以格式为:

pattern1{statement1}pattern2{statement3;statement4;...}

语句块可分为3类:BEGIN语句块、END语句块和main语句块。其中BEGIN语句块和END语句块都是的格式分别为BEGIN{...}END{...},而main语句块是一种统称,它的pattern部分没有固定格式,也可以省略,main代码块是在读取文件的每一行的时候都执行的代码块。

分析下面三个awk命令的执行结果:

awk BEGIN{print "我在前面"}{print $0} a.txt
awk END{print "我在后面"}{print $0} a.txt
awk BEGIN{print "我在前面"}{print $0}END{print "我在后面"} a.txt

根据上面3行命令的执行结果,可总结出如下有关于BEGIN、END和main代码块的特性:

BEGIN代码块:

  • 在读取文件之前执行,且执行一次
  • 在BEGIN代码块中,无法使用$0或其它一些特殊变量

main代码块:

  • 读取文件时循环执行,(默认情况)每读取一行,就执行一次main代码块
  • main代码块可有多个

END代码块:

  • 在读取文件完成之后执行,且执行一次
  • 有END代码块,必有要读取的数据(可以是标准输入)
  • END代码块中可以使用$0等一些特殊变量,只不过这些特殊变量保存的是最后一轮awk循环的数据

 

以上是关于BEGIN和END语句块的主要内容,如果未能解决你的问题,请参考以下文章

FPGA基本语法 begin end ,fork join,disable 用法

SQL中begin end 啥意思?怎么用着条语句?

PLSQL——01PLSQL语句的结构

oracle中declare begin end 这样的用法叫啥语句?它和直接写select那种语句有啥联系?

oracle中declare begin end 这样的用法叫啥语句?它和直接写select那种语句有啥联系?

sqlgo是啥意思,如何使用?