awk模式用来控制awk对输入的文本行执行什么操作。模式由正则表达式、判别条件真伪的表达式或二者的组合构成。awk默认操作是打印所有使表达式结果为真的文本行。模式表达式中暗含if语句。如果模式表达式含有if的意思,就不必用花括号把它括起来。当if是显式地给出时,这个表达式就成了操作语句,语法将不一样。
awk操作是花括号中以分号分隔的语句。如果操作前面有个模式,则该模式控制执行操作的时间。操作可以是简单的语句或复杂的语句组。同一行内的多条语句由分号分隔,独占一行的语句则以换行符分隔。
模式永远不会出现在花括号中。
对awk而言,正则表达式是置于两个正斜杠之间、由字符组成的模式。
匹配操作符(~)用于对记录或字段的表达式进行匹配。
[root@centos ~]# awk '$1 ~ /[Bb]ill/' employees #显示所有在第一个字段里匹配到Bill或bill的行
Billy Black 1683 9/23/44 336500
[root@centos ~]# awk '$1 !~ /ly$/' employees #显示所有第一个字段不是以ly结尾的行。
Tom Jones 4424 5/12/66 543354
Mary Adams 5346 11/4/63 28765
Fu Hao 1456 13/10/80 521455
[root@centos ~]# awk '$5 ~ /\.[7-9]+/' datafile #如果某条记录的第5个字段包含一个句点而且句点后是一或多个7-9之间的数字就打印该记录
southwest SW Lewis Dalsass 2.7 .8 2 18
central CT Ann Stephens 5.7 .94 5 13
POSIX(the Portable Operating System Interface,可移植操作系统接口)字符类是一种工业标准,确保程序可以跨操作系统移植。
gawk支持而awk和nawk不支持的POSIX元子符类,如下表格所示:
[root@centos ~]# gawk '/[[:lower:]]+g[[:space:]]+[[:digit:]]/' employees #gawk搜索一个或多个小写字母,后面跟着一个字母“g”,再后面为一个或多个空格,然后是一个数字的模式。
Sally Chang 1654 7/22/54 650000
脚本是一个包含awk注释和语句的文件。如果同一行中有多条语句或操作,必须用分号将它们隔开。如果每条语句都在不同的行上,就不需要分号来分隔。如果操作跟在某个模式后面,它的左花括号就必须与该模式位于同一行。注释要以井号(#)开头。
[root@centos ~]# awk -F: -f infov employees_MH #awk命令后跟着-F:选项,用于将字段分隔符指定为冒号,-f选项后跟的是awk脚本的名称。awk将从文件infov中读取指令,最后那个参数employee_MH是输入文件的名称。
Tom's birthday is 5/12/66
2 Mary Adams:5346:11/4/63:28765
Hi Sally. Sally Changhas a salary of $650000.
输出字段分隔符OFS默认是空格;
awk的内置变量NF用来保存记录的字段数,在处理每条记录时都会被重置;
阅读(1299) | 评论(1) | 转发(1) |