找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

Linux awk学习

admin 2019-11-7 18:13 121人围观 Linux相关

awk是Linux三剑客之一,在我们处理文件等方面还是特别方便的

介绍

我们先来说一说awk是用来干什么的,awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

我们可以先来看一下awk的版本号



用法

awk命令是由模式和动作的组合组成的
    awk [options] 'pattern {action}' file

    模式,pattern,可以理解为sed的模式匹配,可以由表达式组成,也可以是两个正斜杠之间的正则表达式。

    动作,action,是由在大括号里面的一条或多条语句组成,语句之间使用分号隔开。

    通俗来说pattern就是找谁,action就是干啥

    awk处理的内容可以来自标准输入(<),一个或多个文本文件或管道

    实践

    我们先准备一个文件来用来进行后面的测试



    我们先用一个语句来说一下awk的运作方式



    awk是通过一行一行来处理文件的,上面这条语句执行的过程就是:

    1.awk读入一行内容

    2.判断是否符合模式中的条件(NR>=2),如果匹配到则执行对应的动作({print $0}),如果没有匹配到,继续读取下一行

    3.继续读取下一行

    4.重复1-3,直到读取到最后一行

    其中的$0实际上是awk的内置变量,代表的是当前一整行记录,awk的内置变量有很多,我们这里举出其中的几个来进行说明,可以借用这些内容来进行各种方式的分割操作



    为了更方便的了解,画一个图就很清楚了



    接下来再举一些例子来说明



    使用NR控制了只要2-5行的内容,使用冒号进行分割,然后输出第一段和第三段的内容,上面对比一下就很清楚了

    上面是使用冒号进行分割是在一行进行分割的,也是支持在多行进行分割的,awk对每个要处理的输入数据认为都是具有格式和结构的,而不是一堆字符串,默认情况下,每一行内容都是一条记录,并且以换行符结尾,我们可以用整行来进行输出



    如果想要以冒号来分割并进行换行的话,可以这样操作



    这里再解释一下那个BEGIN是做什么的

      BEGIN{}: 读入第一行文本之前执行的语句,一般用来初始化操作{}: 逐行处理END{}: 处理完最后以行文本后执行,一般用来处理输出结果

      接下来再说一下正则表达式的应用

      比如我们来匹配一下以字符u开头的整行记录



      也可以对其进行指定区域的匹配,匹配第三个区域开头是字符u的记录



      至于其他的正则表达式构造方法还是自行来进行研究吧,这个就属于对正则表达式的了解范畴了

      如果对你有帮助,请点击在看或者转发

      都是对我的一种支持

      快关注吧,就等你了




      ----------------------------------------------------------------------------------------------------------------------
      我们尊重原创,也注重分享,文章来源于微信公众号:无心的梦呓,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
      ----------------------------------------------------------------------------------------------------------------------

      鲜花

      握手

      雷人

      路过

      鸡蛋

      yafeilinux和他的朋友们微信公众号二维码

      微信公众号

      专注于Qt嵌入式Linux开发等。扫一扫立即关注。

      Qt开源社区官方QQ群二维码

      QQ交流群

      欢迎加入QQ群大家庭,一起讨论学习!

      我有话说......