linux awk文本

  • linux awk文本已关闭评论
  • 178 次浏览
  • A+
所属分类:linux技术
摘要

目录 一、awk概念 二、awk的工作过程 三、awk字符 四、内置变量 五、getline 

目录

一、awk概念

二、awk的工作过程

三、awk字符

四、内置变量

五、getline 

六、awk的精准筛选

七、例子演示

八、实验演示

 

 

 

 

 

 

 

 

 

 

 

 

 

一、awk概念

  1.概念:awk 是一个功能强大的编辑工具,逐行读取输入文本,主要作用于文件内容,AWK信息的读入也是逐行指定的匹配模式进行查找,

      对符合条件的内容进行格式化输出或者过滤处理。

  2.分隔符:默认是空格,多个空格会压缩一个,可用-F指定分割符

  3.awk执行过程:1、按照命令找指定的行  2、找到的行 打印,操作 awk默认的操作就是打印

  4.awk优点:可以在无交互的情况下自动化完成文本操作

 

二、awk的工作过程

   1.有BEGIN{action;..}优先执行  

   2.从(stdin)中读取内容,执行pattern{action;..}读取文件内容(没有pattern执行print内容)

   3.执行END{action;..}内容

linux awk文本

 

三、awk字符

  1.-F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符

  2.-v变量赋值

  3.{ }外指定条件,{ }内指定操作。

     4.用逗号指定连续的行,用 || 指定不连续的行。&&表示”且“。

  5.默认为空格或制表位。与"-F"作用相同 用-F可以不加单引号 -F:,用FS必须用=""

  例子演示:

  1.-F指定分隔符

linux awk文本

   2.-v赋值为:,每次出现:就空格

linux awk文本

   3.{}外条件是数量为0打印,{}里操作是打印

linux awk文本

   4.,为间隔符||为且&&为或

linux awk文本

linux awk文本

   5.FS定义分割符

linux awk文本

 

四、内置变量

  内置变量,不能用双引号括起来,不然系统会把它当成字符串。

   NR: 当前处理的行的行号(序数)

   NF: 当前处理的行的字段个数。$NF代表最后一个字段
   FS: 列分割符。指定每行文本的字段分隔符,输入内容的分隔符
      默认为空格或制表位。与"-F"作用相同 用-F可以不加单引号 -F:,用FS必须用=""
      $0: 当前处理的行的整行内容 打印所有
   $n: 当前处理行的第n个字段(第n列)
   OFS:输出内容的列分隔符
   FILENAME:被处理的文件名
   RS: 行分隔符。awk从文件中读取资料时,
   将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是"n"

   1.$0$1(在里面是$0打印所有$1打印一列),在外面0不打印,1打印

linux awk文本

linux awk文本

linux awk文本

   2.NR输出统计行号

linux awk文本

   3.展示行号以及内容

linux awk文本

   4.打印指定行号内容

linux awk文本

   5.范围打印

linux awk文本

   6.打印不相连的行

linux awk文本

   7.正则表达式的范围打印

linux awk文本

   8.偶数打印

linux awk文本

   9.奇数打印

linux awk文本

   10.BEGIN计算

linux awk文本

   11.幂运算

linux awk文本

 

五、getline

  1.当getline左右无重定向符号(“<”,">")或者管道符号(“|”)时,awk首先读取的是第一行,而getline获取的是光标跳转至下一行的内容(也就是第二行)。

  2.当getline左右有管道符号或重定向符时,getline则作用定向输入文件,由于文件是刚打开,并没有被awk读入一行,而只是getline读入,所以getline返回的是文件的第一行,而不是跳转至一行输入

  使用getline偶数打印

linux awk文本

   使用getline奇数打印

linux awk文本

   使用getline将1.txt传给2.txt

linux awk文本

   将1.txt内容传给2.txt展示出来

linux awk文本

 

六、awk的精准筛选

  $n(> < ==): 用于对比数值
  $n~"字符串": 代表第n个字段包含某个字符串
  $n!~"字符串": 代表第n个字段不包含某个字符串
  $n=="字符串": 代表第n个字段为某个字符串
  $n!="字符串": 代表第n个字段不为某个字符串
  $NF: 代表最后一个字段

  1.输出有bash,并且输出第一列和第7列

linux awk文本

   2.输出第七个字段不包含“nologin”所在行的第一个字段和最后一个字段

linux awk文本

 

七、例子演示

  1.过滤打印

 

linux awk文本

linux awk文本

   2.行号加1递归

linux awk文本

   3.过滤passwd展示前4行的第一列

linux awk文本

   4.替换:换为+

linux awk文本

   5.以:为分隔符换行输出

linux awk文本

   6.打印uid大于1000的用户信息

linux awk文本

   7.使用if判断用户信息

linux awk文本

   8.三元表达式,?相当于then,:相当于else

linux awk文本

   9.awk中的数组形成遍历

linux awk文本

 

八、实验演示

  1.简单的日志分割

linux awk文本

   2.提取host.txt主机名后再放回host.txt文件

linux awk文本

   3.统计磁盘可用容量

linux awk文本

   4.统计/etc下文件总大小

linux awk文本

   5.CPU使用率

linux awk文本

   6.统计内存

linux awk文本