awk正则提取匹配上的字符串?

awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行。awk比sed更加强大,它能做到sed能做到的,同样也能做到sed不能做到的。awk常用来分段;

1、截取文档中的某个段

 

-F 选项的作用是指定分隔符,如果不加-F指定,则以空格或者tab为分隔符。 Print为打印的动作,用来打印出某个字段。$1为第一个字段,$2为第二个字段,依次类推,有一个特殊的那就是$0,它表示整行
{ }内可以打印多个字段$1,$3,$7 打印第1、3、7段,中间用逗号隔开;

打印分段默认分隔符为空格,可以自定义分隔符,分隔符需要用双引号括起来;也可以OFS定义输出分隔符;


  
 

注意awk的格式,-F后紧跟单引号,然后里面为分隔符,print的动作要用 { } 括起来,否则会报错。print还可以打印自定义的内容,但是自定义的内容要用“”双引号括起来。

 

可以让某个段去匹配,~ 表示匹配的意思,以冒号分隔第一字段然后匹配//里的关键字;

 

awk还可以多次匹配,如上例全文匹配包含root关键词的行,再匹配包含user的行,打印所匹配的第1、3段。


  

判断第3个字段为10的并且打印该行的第7字段;


  

awk中是可以用逻辑符号判断的,比如 ‘==' 就是等于,也可以理解为 ‘精确匹配' 另外也有 >, ‘>=, ‘<, ‘<=, ‘!= 等等,值得注意的是,在和数字比较时,若把比较的数字用双引号引起来后,那么awk不会认为是数字,而认为是字符,不加双引号则认为是数字。

示例,双引号括起来认为是字符;加单引号和不加则认为是数字;

 

  

!= 为不匹配,第7字段不等于/sbin/nologin的行,需要用双引号括起来。

 

除了针对某一个段的字符进行逻辑比较外,还可以两个段之间进行逻辑比较。
示例,加双引号之后把数字当字符看;

 

示例,加单引号之后为数字比较;


  

另外还可以使用 && “并且”和  || “或者” 的意思。
示例,打印第3段大于第4段,并且第7段为/bin/bash的行;

 

示例,打印第3段小于第4段,或者第7段为/bin/bash的行;


  

4、awk的内置变量 awk常用的变量有:
NF :用分隔符分隔后一共有多少段


 

NF 表示是多少段,而$NF是最后一段的值, 而NR则是行号。

5、awk中的数学运算 awk还可以对各个段的值进行数学运算:


这里的END要注意一下,表示所有的行都已经执行,这是awk特有的语法,其实awk连同sed都可以写成一个脚本文件,而且有他们特有的语法,在awk中使用if判断、for循环都是可以的。

示例,if判断,如第一段的值为root,打印整行;


 

示例,for循环,定义sum变量,i值为第3段的值;求第3段的和;


以上就是关于linux正则表达式awk的全部内容,希望对大家的学习有所帮助。


· TA获得超过1.1万个赞

本回答被提问者和网友采纳

    awk是一种模式扫描和处理工具,相对于grep的查找,sed的编辑,它在对数据进行分析生成报表时显得尤为强大。awk通过逐行遍历一个或多个文件的方式,查找模式匹配到的行,而后以指定的分隔符(缺省为空格)进行切片,然后针对切片数据进行处理和分析。事实上,gawk有自己的语言,其本身就相当于一个解释器,允许用户创建简短的程序读取输入文件,对输入数据执行排序、计算以及生成报表操作,甚至可以类似bash shell实现诸如循环、数组、条件判断、函数、变量等功能,进而完成更为复杂的数据分析处理任务。

         //awk使用中,需要处理的文件,逐行使用分隔符分割成若干个字段,称之为域,分隔符默认是空格,可使用-F选项来指定分隔符

         自定义变量有两种方式(上文基本语法中已有示例,此处不再赘述),但是,在脚本中仍然可以声明变量。

         (2)、输出分隔符,默认为空格(如上图上例显示结果),接上例,以:为输出分隔符显示输出结果

         如其名,使用正则表达式匹配模式,在需要注意的是,在awk中使用正则表达式,匹配字符串要使用双斜线括起来,而后匹配到的行将被切片并分析处理,反之将略过。

输入重定向需用到getline函数。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1,可以结合到while等流控制语句使用。 

        (2)、输出的item可以是字符串或数值、当前分隔出来的域(字段,如$1)、变量或awk的表达式,数值会隐式转换为字符串输出。

          取出系统用户的用户名和默认shell,要求用户名左对齐,占用15个字符,字符串显示;要求默认shell左对齐,占用20字符,字符串显示

         使用显示浮点数自身(%f)的方式显示,会自动补全精度,长于精度部分将会执行四舍五入

我要回帖

更多关于 shell字符串比较相等 的文章

 

随机推荐