# awk从放弃到入门（8）：awk动作总结之二

- 17

- A+

所属分类：Linux基础

> 在本博客中，AWK是一个系列文章，本人会尽量以通俗易懂的方式递进的总结awk命令的相关知识点。

> awk系列博文直达链接：AWK命令总结之从放弃到入门（通俗易懂，快进来看）

这篇文章中的知识点是建立在前文的基础上的，如果你还没有掌握前文中的知识，请先参考之前的文章。

注：在阅读这篇文章之前，最好已经了解了一些开发的基本语法，比如，for、while、do...while 等，否则在阅读时 有可能遇到障碍。

前文中，我们介绍了awk中的条件判断语句。

比如 "if"

比如 "if...else..."

比如 "if...else if...else..."

我们说过，这些语句都可以归类为"控制语句"，但是这些并不是"控制语句"的全部，今天我们继续聊聊awk的"控制语句"。

今天的话题主要与"循环"有关，说到"循环"，你一定会想起 for、while 等字眼，没错，awk中也有for循环、while循环等控制语句。

其实，只要我们有一点点开发基础，理解这些都不是什么难事，因为它们的用法与其他编程语言中的用法并没与什么区别。

我们先来看一下这些循环控制语句的语法，然后再进行举例。

Shell
#for循环语法格式1 for(初始化; 布尔表达式; 更新) { //代码语句 } #for循环语法格式2 for(变量 in 数组) { //代码语句 } #while循环语法 while( 布尔表达式 ) { //代码语句 } #do...while循环语法 do { //代码语句 }while(条件)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #for循环语法格式1 for(初始化; 布尔表达式; 更新) { //代码语句 } #for循环语法格式2 for(变量 in 数组) { //代码语句 } #while循环语法 while( 布尔表达式 ) { //代码语句 } #do...while循环语法 do { //代码语句 }while(条件)

好了，了解了语法，现在来看看示例，就从for循环开始吧。

因为我们还没有介绍过数组，所以此处只演示上述语法中的格式1的用法。

上例中，我们使用了BEGIN模式，BEGIN模式对应的动作中，包含了for循环语句，看到这里，是不是感觉与其他语言中的for循环完全没有区别嘛？只不过，上例中的for循环语句都写在了一行中而已。

再来看看while循环的具体使用，为了方便演示，仍然使用BEGIN模式，示例如下。

当while对应的条件满足时，则执行对应的语句，语句执行完成后，对条件进行修改。

同理，do...while的示例如下，它与while循环的不同之处在于，while循环只有当满足条件时才会执行对应语句，而do...while循环则是无论是否满足条件，都会先执行一遍do对应的代码，然后再判断是否满足while中对应的条件，满足条件，则执行do对应的代码，如果不满足条件，则不再执行do对应的代码。

正如上图所示，无论是否满足while中的条件，都会先执行一遍do对应的代码。

那么，说到循环，就不能不说说与循环有关的跳出语句。

没错，与其他编程语言中一样，在awk中，同样可以使用break与continue跳出循环。

continue的作用：跳出"当前"循环

break的作用：跳出"整个"循环

示例如下，先看看continue的示例

由于在for循环中添加了条件判断，所以当 i 的值为 3 时，跳过了"当前本次"循环，没有执行当前本次循环需要执行的动作，所以上例中，数字"3"并没有被打印出来。

当然，如果你想"结束"的更加"彻底"，可以使用break结束循环，示例如下。

如上图所示，break结束的更加彻底，当使用break时，整个循环都将被结束，循环中的动作将不会再被执行。

continue与break同样可以用于while循环与do...while循环，此处就不再赘述了。

当然，如果你经常编写过shell脚本，你可能会问，awk中有类似exit的语句吗？必须有啊，在shell中，exit命令表示退出当前脚本，在awk中，它的含义也是类似的，它表示不再执行awk命令，相当于退出了当前的awk命令，示例如下。

如上图所示，上图中第一条命令中，执行了多个动作（多条语句），上图中的第二条命令中，也执行了多个动作，但是当在awk中执行了exit语句以后，之后的所有动作都不会再被执行，相当于退出了整个awk命令。

其实，这样描述exit的作用并不准确，因为，当在awk中使用了END模式时，exit的作用并不是退出整个awk命令，而是直接执行END模式中的动作，示例如下。

如上图所示，当awk中使用了END模式时，如果执行了exit语句，那么exit语句之后的所有动作都将不会再被执行，END模式中的动作除外。

换句话说就是，当执行了exit语句后，如果使用了END模式，将直接执行END模式中的动作，其他动作将不会被执行，如果没有使用END模式，当执行了exit语句后，将直接退出整个awk命令。

在awk中，除了能够使用"exit命令"结束"整个awk"，还能够使用"next命令"结束"当前行"，什么意思呢？我们慢慢聊。

在前文中，我们提到过，awk是逐行对文本进行处理的，也就是说，awk会处理完当前行，再继续处理下一行，那么，当awk需要处理某一行文本的时候，我们能不能够告诉awk ："不用处理这一行了，直接从下一行开始处理就行了"。

没错，使用next命令即可让awk直接从下一行开始处理，换句话说就是，next命令可以促使awk不对当前行执行对应的动作，而是直接处理下一行，示例如下。

其实，next与continue有些类似，只是，continue是针对"循环"而言的，continue的作用是结束"本次循环"，而next是针对"逐行处理"而言的，next的作用是结束"对当前行的处理"，从而直接处理"下一行"，其实，awk的"逐行处理"也可以理解成为一种"循环"，因为awk一直在"循环"处理着"每一行"，不是吗？

awk的常用的流程控制语句与循环语句都已经总结完毕了，希望这篇文章能够帮助到你。

我的微信公众号
关注"实用运维笔记"微信公众号，当博客中有新文章时，可第一时间得知哦~
赞 98
赏
分享

- awk

- 版权声明：本站原创文章，于2017年6月20日23:59:19，由 朱双印 发表，共 2212 字。
- 如需转载，请在文章头部注明出处：awk从放弃到入门（8）：awk动作总结之二 | 朱双印博客

awk从放弃到入门（11）：拾遗之”三元运算”与”打印奇偶行”
awk从放弃到入门（10）：awk内置函数
awk从放弃到入门（9）：awk数组详解
awk从放弃到入门（7）：awk动作总结之一

### 发表评论取消回复

欢迎 pangzi 再次光临！
修改信息

正在提交, 请稍候...
#

昵称*

邮箱*

网址

有回复时邮件通知我

## 目前评论：17 其中：访客 14 博主 3

2. 迷之夏天 3
   回复 2020年4月24日 下午1:04 沙发

   打卡，博主最帅，博主么么哒～

4. fujisang 0
   回复 2020年2月29日 下午6:35 板凳

   awk学习到此受益匪浅 就这节内容个人觉得：
   awk本身就是逐字段 逐行 来处理文本的，所以循环语句的功能在此是否显得有些重复呢。
   纯粹是个人的拙见呐

6. zz 1
   回复 2019年8月23日 上午11:37 地板

   为什么next命令不能用于BEGIN模式呢？

   - 🐕 0
     回复 2020年2月14日 下午8:26 1层

     @zz BEGIN是在awk执行前执行的操作

8. MOON 1
   回复 2019年7月14日 下午4:44 4楼

   哈哈

10. Pearl 2
    回复 2018年9月21日 下午3:44 5楼

    讲的真好。通俗易懂。

12. 小土豆 4
    回复 2018年9月7日 下午5:15 6楼

    不能发表情

14. 十省总督 0
    回复 2018年7月7日 上午10:45 7楼

    顶

16. 查安生 0
    回复 2018年2月2日 上午11:52 8楼

    学习学习了，感谢博主提供如此简明易懂教程

18. 妞妞 4
    回复 2017年11月23日 下午4:28 9楼

    滴。。。。打卡

20. 妞妞 4
    回复 2017年8月1日 上午10:46 10楼

    吸收中。。。强势帮顶；

    - 朱双印 Admin
      回复 2017年8月1日 下午6:09 1层

      @妞妞 加油~~强烈感谢你的强势捧场 666~

22. 易知难 4
    回复 2017年7月29日 上午7:40 11楼

    博主棒棒哒！最近在补三剑客，博主内容对我很有用，在此感谢！

    - 朱双印 Admin
      回复 2017年7月29日 上午9:13 1层

      @易知难 嗯嗯嗯~~三剑客还差一个sed，回来补上~~

24. echo 6
    回复 2017年6月27日 下午9:52 12楼

    跟着博主走 有肉吃

    - 朱双印 Admin
      回复 2017年6月27日 下午10:05 1层

      @echo 哈哈，兄弟幽默，加油~~

26. 励志语录 0
    回复 2017年6月21日 下午10:19 13楼

    学习了，很多有用的东西

- 文章目录

×
×
拖拽到此处
图片将完成下载