# awk从放弃到入门（5）：awk模式（Pattern）之一

- 54

- A+

所属分类：Linux基础

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

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

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

我们之前一直在提，awk的使用语法如下（我想你已经很熟悉了）：

awk [options] 'Pattern {Action}' file1 file2 ···

对于options（选项）而言，我们使用过-F选项，也使用过-v选项。

对于Action（动作）而言，我们使用过print与printf，之后的文章中，我们还会对Action进行总结。

对于Pattern（模式）而言，我们在刚开始学习awk时，就介绍了两种特殊模式，BEGIN模式和END模式，但是，我们并没有详细的介绍"模式"是什么，怎么用,而此处，我们将详细的介绍一下awk中的模式。

"模式"这个词听上去文绉绉的，不是特别容易理解，那么我们换一种说法，我们把"模式"换成"条件"，可能更容易理解，那么"条件"是什么意思呢？我们知道，awk是逐行处理文本的，也就是说，awk会先处理完当前行，再处理下一行，如果我们不指定任何"条件"，awk会一行一行的处理文本中的每一行，如果我们指定了"条件"，只有满足"条件"的行才会被处理，不满足"条件"的行就不会被处理。这样说是不是比刚才好理解一点了呢？这其实就是awk中的"模式"。

再啰嗦一遍，当awk进行逐行处理的时候，会把pattern（模式）作为条件，判断将要被处理的行是否满足条件，是否能跟"模式"进行匹配，如果匹配，则处理，如果不匹配，则不进行处理。

看个小例子，就能秒懂，前提是建立在之前知识的基础之上。

如下图所示，test2文件中有3行文本，第一行有4列，第二行有5列，第三行只有2列。而下图的awk命令中，就使用到了一个简单的模式。

上图中，我们使用了一个简单的"模式"，换句话说，我们使用了一个简单的"条件"，这个条件就是，如果被处理的行正好有5列字段，那么被处理的行则满足"条件"，满足条件的行会执行相应的动作，而动作就是{print $0}，即打印当前行，换句话说，就是只打印满足条件的行，条件就是这一行文本有5列（NF是内置变量，表示当前行的字段数量，如果你忘了，那么请你重新看一遍之前的文章），而上例中，只有第二行有5列，所以，只有第二行能与我们指定的"模式"相匹配，最终也就只输出了第二行。

这就是所谓的"模式"，其实很简单，对吧。聪明如你，应该已经能够举一反三了，举例如下。

没错，"模式"怎样写，取决于我们想要给出什么样的限制条件。

细心如你一定发现了，上图中使用的"模式"都有一个共同点，就是上述"模式"中，都使用到了关系表达式（关系操作符），比如 ==，比如<=，比如>，当经过关系运算得出的结果为"真"时，则满足条件（表示与指定的模式匹配），满足条件，就会执行相应的动作，而上例中使用到的运算符都是常见的关系运算符，我们就不解释了，那么awk都支持哪些关系运算符呢？我们来总结一下。

关系运算符 | 含义 | 用法示例
< | 小于 | x < y
<= | 小于等于 | x <= y
== | 等于 | x == y
!= | 不等于 | x != y
>= | 大于等于 | x >= y
> | 大于 | x > y
~ | 与对应的正则匹配则为真 | x ~ /正则/
!~ | 与对应的正则不匹配则为真 | x !~ /正则/

我们把这种用到了"关系运算符"的"模式"称之为："关系表达式模式"或者"关系运算符模式"。

其实，在学习"模式"之前，我们一直都在使用"模式"，只是我们没有感觉到而已，为什么这么说呢？听完下面的解释，你就会明白。

上图中的命令1指定了"模式"，而且这种"模式"是"关系表达式模式"，如果当前行的字段数量等于5，模式被匹配，对应的行被打印。

上图中的命令2貌似没有使用任何"模式"，所以，每一行都执行了指定的动作，即每一行都被输出了，其实，这种没有被指定任何"模式"的情况，也是一种"模式"，我们称这种情况为"空模式"，"空模式"会匹配文本中的每一行，所以，每一行都满足"条件"，所以，每一行都会执行相应的动作。

现在，我们不仅懂得了什么是awk的"模式（Pattern）"，而且还掌握了两种"模式"，空模式和关系运算模式。

不对，我们似乎遗忘了什么 ，我们还用过BEGIN模式和END模式，我们来回顾一下吧。

BEGIN模式，表示在开始处理文本之前，需要执行的操作。

END模式，表示将所有行都处理完毕后，需要执行的操作。

还记得我们在第一篇awk博文中使用到的例子吗，温故知新，回过头看，会有新发现

上图中的示例用到了BEGIN模式，空模式，END模式。

其实，"模式"还有其他的"样子"，只是我们今天还没有见识到而已，不过，今天的时光也没有白费，起码我们知道了"模式"的概念，以及如下三类"模式"

1、空模式

2、关系运算模式

3、BEGIN/END模式

笔者为了偷懒，今天就先到这里吧，等过两天，我们再看看模式的其他用法，再了解一下除了上述三类的其他类型的"模式"。

老规矩，求评论，求点赞，求收藏，求推荐~~~~各位客官，么么哒~~~~~

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

- awk

- 版权声明：本站原创文章，于2017年3月29日08:56:50，由 朱双印 发表，共 2111 字。
- 如需转载，请在文章头部注明出处：awk从放弃到入门（5）：awk模式（Pattern）之一 | 朱双印博客

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

### 发表评论取消回复

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

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

昵称*

邮箱*

网址

有回复时邮件通知我

## 目前评论：54 其中：访客 40 博主 14

2. 运维小白 2
   回复 2020年5月30日 下午3:04 沙发

   感谢博主，学无止境，加油

4. 一根烟的故事 1
   回复 2020年4月29日 上午10:59 板凳

   打卡 继续向博主跟进！动力源自于原来我是小白也能跟着学 哈哈！

6. 迷之夏天 3
   回复 2020年4月23日 下午6:20 地板

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

8. 临江仙 4
   回复 2020年2月8日 下午6:51 4楼

   喜欢，希望博主大大能继续抽空写，写得太好了

10. fisher 1
    回复 2019年12月19日 下午12:31 5楼

    入门精品.

12. 小略略 2
    回复 2019年12月12日 上午11:08 6楼

    谢谢博主，写的真棒。

14. pyyu 1
    回复 2019年11月7日 下午5:49 7楼

    朱老师，有意向授课Linux吗？您的文章写的太棒了，从放弃到入门很赞，有意向联系yc_uuu@163.com

16. darkidot 2
    回复 2019年10月29日 下午4:58 8楼

    不错

18. gavin 3
    回复 2019年10月8日 下午6:18 9楼

    博主你好，一个awk语句里可以同时使用两个关系运算模式吗，比如要匹配NR大于1，小于100的行，可以实现吗

20. 迈克尔西门庆 2
    回复 2019年7月25日 下午2:29 10楼

    你不去当老师是教育界的重大损失！！！！！！！！！

22. 小虎 0
    回复 2019年6月19日 上午8:31 11楼

    挺好的

24. 马踏实地 1
    回复 2019年5月8日 上午12:28 12楼

    写的太好了，真的是从放弃到入门的感觉，感谢博主，博主可以根据内容，增加一些实际应用场景的题目吗？这样会加深理解和记忆。

26. 夜雨 1
    回复 2019年4月11日 下午1:56 13楼

    看了很多博主的文章，感谢！

    - 朱双印 Admin
      回复 2019年4月11日 下午4:30 1层

      @夜雨 捧场了，能帮助到你就好，加油～

28. 阿柚 1
    回复 2019年3月25日 下午5:14 14楼

    最近真的看了很多篇博主写的文章。真的是通俗易懂，学会了很多知识。非常感谢您的分享~~~

30. 青泥何盘盘 0
    回复 2019年3月21日 上午11:12 15楼

    通俗易懂

32. sahara 0
    回复 2018年12月20日 下午7:24 16楼

    博主辛苦了，受益匪浅，巩固，从细节看长远，受教了，感谢🙏

34. awker 2
    回复 2018年11月22日 下午4:13 17楼

    写的非常好，可以出书了，打卡！

36. Jefferson_CBird 1
    回复 2018年11月16日 下午4:46 18楼

    我只想说，作者是我在网上上看inux技术点表达最“通俗易懂”的一个。看了几天你的AWK，感觉AWK真的很强大。作者在这上面花得功夫，真没话说。
    很欣赏你写的linux文章, 如果可以，很希望能跟作者交个朋友，一起讨论讨论。我微信：zxcvedis

38. 云寒 0
    回复 2018年11月16日 上午10:48 19楼

    受益匪浅

40. 清水咸鱼 0
    回复 2018年10月30日 下午5:16 20楼

    博主awk系列写的非常好，最近刚好在复习awk用法，跟着博主的awk系列复习非常赞！还想问下，博主的博客是用什么建的？

42. kdsc 0
    回复 2018年10月25日 下午11:07 21楼

    写的真好 楼主多出点文章吧 特别是工作常用到的

44. 西门大官人 2
    回复 2018年9月30日 下午2:59 22楼

    感谢双印大官人

    - 朱双印 Admin
      回复 2018年10月1日 上午11:15 1层

      @西门大官人 哈哈~西门大官人捧场~~

46. sunshineyifei 1
    回复 2018年9月18日 下午8:08 23楼

    写的真好

48. wmy 1
    回复 2018年9月12日 下午5:41 24楼

    为了偷懒，今天先讲到这里。。。。。。你为何如此优秀

50. 鹿少 2
    回复 2018年8月15日 下午5:48 25楼

    第五篇点击下一篇后面跳到mysql的文章去了，索引不对了呀

52. 鹿少 2
    回复 2018年8月15日 下午5:46 26楼

    写的很棒啊

54. tjyuanxi 0
    回复 2018年3月6日 上午9:58 27楼

    这是我见过讲得最浅显易懂的awk课件。 赞楼主。么么哒

    - 朱双印 Admin
      回复 2018年3月6日 上午10:47 1层

      @tjyuanxi 感谢捧场~

56. 落日无悔 1
    回复 2017年12月21日 下午11:32 28楼

    看了下，写得真的比较容易让掌握，多谢了，朱兄！

58. 易知难 4
    回复 2017年7月28日 下午4:15 29楼

    打卡！
    模式：
    1、空模式
    2、关系运算模式
    3、BEGIN/END模式

    - 朱双印 Admin
      回复 2017年7月28日 下午11:53 1层

      @易知难 666，读书从厚到薄，再从博到厚，加油~~~

60. 卡伊娃 1
    回复 2017年7月19日 上午8:03 30楼

    老铁的awk入门，简单易懂，适合我们这些小白，谢谢！

62. echo 6
    回复 2017年6月21日 下午8:58 31楼

    讲的beautiful

    - 朱双印 Admin
      回复 2017年6月21日 下午9:03 1层

      @echo 兄弟，进度挺快~加油~

      - echo 6
        回复 2017年6月22日 下午8:22 2层

        @朱双印 不快呢 zabbix搞了三晚上都没装上 我暂时放弃了

        - 朱双印 Admin
          回复 2017年6月22日 下午8:27 3层

          @echo 可能是遇到了一个点，暂时过不去，过两天放空重来，可能就好了

64. GMFTBY 1
    回复 2017年5月20日 上午9:56 32楼

    谢谢博主，学习了，坐等更新

    - 朱双印 Admin
      回复 2017年5月20日 上午11:00 1层

      @GMFTBY 正在铺垫中哦~~

66. _ 0
    回复 2017年5月9日 下午5:09 33楼

    写的非常好，整体布局内容看得非常舒服

    - 朱双印 Admin
      回复 2017年5月9日 下午6:31 1层

      @_ 谢谢客官夸奖~~

    - 9527 1
      回复 2018年7月6日 上午9:27 1层

      @_ 的确是，我都感觉这个系列博客都可以做教材使用。条理清晰，结构分明，语言幽默。
      继续关注，继续学习。
      博主辛苦了，谢谢。

68. linux萌新 0
    回复 2017年5月5日 下午11:06 34楼

    大神 写的很好啊，很容易让我理解

    - 朱双印 Admin
      回复 2017年5月5日 下午11:13 1层

      @linux萌新 客官好，我也好，大家好才是真的好~

70. 期待更新 0
    回复 2017年4月27日 下午11:09 35楼

    大神期待更复杂的日志分析举例

    - 朱双印 Admin
      回复 2017年4月28日 上午8:55 1层

      @期待更新 谢谢客官关注哦~~~，最近正在更新iptables，之所以没有更新awk是因为总结模式的时候想用正则表达式做举例，但是正则还没有更新，想把以前总结的正则跟grep放在一起写，但是这样一下就需要占用好多业余时间去写，所以决定暂时把iptables的写完，然后就开始写grep和正则，差不多的话awk就继续往后写，因为awk还有判断分支与循环什么的，所以肯定会往后写的，看来还是有同学在看awk的，我会尽快的，你的关注就是对我最大的肯定~~

    - 朱双印 Admin
      回复 2017年4月28日 上午9:12 1层

      @期待更新 还有，忘了做广告了，关注我的微信公众号（文章下方有二维码），有新文章时可以第一时间得到通知哦~~~

72. 期待作者大大继续发表研究成果 1
    回复 2017年4月5日 下午4:26 36楼

    作为转到linux的萌新，一口气看完了awk的系列，深入浅出，介绍的很细致，期待继续更新啊

    - 朱双印 Admin
      回复 2017年4月5日 下午4:43 1层

      @期待作者大大继续发表研究成果 一直在努力的更新着，只是我一个人精力有限，平常也要工作，每写一片文章都在想怎样让这片文章更加通俗易懂，所以比较耗费时间，如果只是把之前的总结复制粘贴一下，那么一下就能多出来几百篇文章来，但是这样就会降低博客的质量，而且对于入门的朋友来说，就少了更多的帮助，翻翻之前的笔记，写的比较简单，估计只有我自己可以看懂，首先，非常感谢这位客官，如果没有你们捧场，我也不会有一直写博客的动力，以前的总结也不会再翻新了，你的肯定会让我写出更多的文章，希望这些文章能够帮到你，加油~

74. 啊哈 0
    回复 2017年4月1日 下午6:29 37楼

    你好，看了你写的awk命令的相关知识，写的很详细，很通俗易懂，但是没有提到使用awk处理多个文件的，希望后续能写一下供大家学习参考

    - 朱双印 Admin
      回复 2017年4月1日 下午10:04 1层

      @啊哈 好的~~

76. 风影 0
    回复 2017年3月30日 下午8:22 38楼

    写的不错，循序渐进，解释的也很明白 很适合初学者学习

    - 朱双印 Admin
      回复 2017年3月30日 下午9:55 1层

      @风影 谢谢肯定~~

- 文章目录

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