张三 2000
李四 1800
王大锤 2700
其中$3=="M"
是pattern, print $1, $4* 5
是action,两者通过大括号分开。print
用于打印数据,且以换行符结束。在print
语句中由逗号分隔的表达式, 在输出时默认用一个空格符分隔。
正如上面展示那样我们运行一个awk程序需要如下这样:
当然awk也支持同时处理多个文件:
如果awk程序内容较长,我们可以把程序放在一个独立的文件中:
在详解讲解模式和动作之前,我们来进行一些简单的练习:
打印所有行
awk ‘{print $0}’ emp.data
如果一个动作没有模式, 对于每一个输入行, 该动作都会被执行。此处的$0可以省略。等效于
awk ‘{print}’ emp.data
打印某些字段,这里是姓名和年龄
awk ‘{print $1,$2}’ emp.data
打印月薪超过2000的员工
awk ‘$4 * $5 >2000 {print $1, $4*$5}’ emp.data
awk模式大致可以分5大类,上面我们使用的都是常规表达式模式,此外还有正则表达式模式,BEGIN/END模式,组合模式,范围模式。
BEGIN/END模式
BEGIN{ statements}或 END{ statements}
BEGIN将在输入被读取之前, statements 执行一次, END会当所有输入被读取完毕之后, statements执行一次
常规表达式模式
expression { statements}
每碰到一个使 expression 为真的输入行, statements 就执行. expression 为真指的是其值非零或非空
正则表达式模式
/regular expression/ { statements}
当碰到这样一个输入行时, statements 就执行: 输入行含有一段字符串, 而该字符串可以被 regular expression 匹配
compound pattern { statements}
一个复合模式将表达式用 &&(AND), (OR), !(NOT), 以及括号组合起来; 当 compound pattern 为真时, statements 执行
pattern1, pattern2 { statements}
一个范围模式匹配多个输入行, 这些输入行从匹配 pattern1 的行开始, 到匹配的行结束 (包括这两行), 对这其中的每一行执行 statements