准备一个数据文件 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
文档摘录: