回到:


BEGIN和END语句块

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

例如:

awk '{print $0}' a.txt
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循环的数据

最新文章

  1. CNN车型分类总结
  2. Ruby中Block, Proc, 和Lambda
  3. 干货分享:IBM StorwizeV7000部署与运维
  4. Qt 5.4 OpenCV 2.4.11 Win 32 Configuration
  5. HGE游戏引擎之实战篇,渐变的游戏开场
  6. 3 Ways of JDK Source Code Attachment in Eclipse---reference
  7. js的一个稍微高级点的用法
  8. Linux基本操作 1-----命令行BASH的基本操作
  9. js之with
  10. JS 中 原生方法 (一) --- 字符串
  11. ECMA Script 6_symbol(symbol.iterator) 新接口_iterator接口
  12. Chapter 4 Invitations——2
  13. 我个人对OOP的理解
  14. Linux yum仓库配置
  15. css3新增功能
  16. PL/SQL编程1-基础
  17. 工具类之Mutex
  18. resultMap的使用
  19. JAVA中 this关键字的用法
  20. 设计模式:访问者(Visitor)模式

热门文章

  1. 2019-2020-4 20199317《Linux内核原理与分析》第四周作业
  2. 记录我的 python 学习历程-Day02-while 循环/格式化输出/运算符/编码的初识
  3. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
  4. luogu P1908 逆序对 |树状数组
  5. IOS之文件夹创建、删除,图片在本地的保存和加载
  6. 学习go语言第二天-变量、常量
  7. linux运维中经常使用的目录和文件讲解
  8. F5负载均衡架构
  9. THREE.js 笔记
  10. docker-compose部署