Chinaunix首页 | 论坛 | 博客
  • 博客访问: 194860
  • 博文数量: 49
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 492
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-08 16:23
文章分类

全部博文(49)

文章存档

2012年(8)

2011年(34)

2008年(7)

分类:

2011-04-28 00:44:25

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) |
给主人留下些什么吧!~~

fuowen202011-04-28 09:06:22

awk的内置变量NR是用来保存记录数。