`

AWK pattern {action} 详解

    博客分类:
  • awk
阅读更多

 

 

准备一个数据文件 awk-sample-salary.txt


 

一、Pattern {Action} 详解

这一节的目标:详解 Pattern和{Action}的组合方式, 这两者各自的详解请看下面

这里以简单的正则表达式作为Pattern为例,(Pattern本身又有多种case、组合,请参考 “ 二、Pattern详解 ”)

1.单个Pattern {Action}

/^A/{print} #筛选出以A开头的行,并打印该行数据

//{print}   #打印每一行, //表示无条件的匹配,即匹配所有的行 , {print} 没有指定哪一行,默认就是整行,即{print $0}

// #省略掉Action,默认就是 {print}

{print}     #省略掉Pattern,默认就是无条件的匹配,即匹配所有的行

 

执行结果


 

2.多个 Pattern {Action} 

通过;来分割,或者省略;

/^A/{print "Department is A"} ; /John/{print "      and Name is Johe"}

/^A/{print "Department is A"}  /John/{print "      and Name is Johe"}

 


 

 

二、Pattern详解

参见 http://www.aslibra.com/doc/awk.htm 的附录A, 补充如下

 

 

摘录GAWK的man帮助:

 

 

AWK patterns may be one of the following:  
              BEGIN  
              END  
              /regular expression/  
              relational expression  
              pattern && pattern  
              pattern || pattern  
              pattern ? pattern : pattern  
              (pattern)  
              ! pattern  
              pattern1, pattern2

 

1. 正则表达式  /regular expression/

/^A/    行匹配,  等价于 $0 ~ /^A/

$1~//  列匹配,  等价于 // {if(match($1,//)) print}

$1!~// 列匹配取反,等价于 // {if(!match($1,//)) print}

 

2. 关系表达式  relational expression

注意:Pattern里的关系不能出现 if else ,只有在 {action} 里才可以有if else 等控制语句

awk 提供 C 语言中常见的关系运算符(Relational Operators) 

>,>=,<,<=,==,!=

NF==5 {print}

NR>=3 && NR<=5  {print} #打印第3行到第5行,

$2!="Jhone" {print}

 

3. Patterns组合

多个Pattern可以通过关系运算符来组合成更复杂的一个Pattern ,  加上() 可以控制优先级.

3.1 &&   ||  ! ()

 

(pattern1 || pattern2)  &&  (!pattern3)

 

3.2 pattern ? pattern : pattern  (三目运算符)

 

3.3 特殊的组合 : pattern1,pattern2

 

pattern1,pattern2 {action}:   从 匹配pattern1的行(假设是row1)到匹配pattern2的行(假设是row2),

从row1到row2之间的所有行  都执行{Action}

NR==3,NR==5 {print}  #打印第3行到第5行

 

三、Action详解

参见 http://www.aslibra.com/doc/awk.htm 的附录B

文档摘录:

 


 

 

 

  • 大小: 9.4 KB
  • 大小: 30.8 KB
  • 大小: 17.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics