Awk学习笔记资料.doc

上传人:小** 文档编号:89301472 上传时间:2019-05-23 格式:DOC 页数:18 大小:143KB
返回 下载 相关 举报
Awk学习笔记资料.doc_第1页
第1页 / 共18页
Awk学习笔记资料.doc_第2页
第2页 / 共18页
Awk学习笔记资料.doc_第3页
第3页 / 共18页
Awk学习笔记资料.doc_第4页
第4页 / 共18页
Awk学习笔记资料.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《Awk学习笔记资料.doc》由会员分享,可在线阅读,更多相关《Awk学习笔记资料.doc(18页珍藏版)》请在金锄头文库上搜索。

1、Awk学习笔记Table of Contents1. awk简介2. awk命令格式和选项2.1. awk的语法有两种形式2.2. 命令选项3. 模式和操作3.1. 模式3.2. 操作4. awk的环境变量5. awk运算符6. 记录和域6.1. 记录6.2. 域6.3. 域分隔符7. gawk专用正则表达式元字符8. POSIX字符集9. 匹配操作符()10. 比较表达式11. 范围模板12. 一个验证passwd文件有效性的例子13. 几个实例14. awk编程14.1. 变量14.2. BEGIN模块14.3. END模块14.4. 重定向和管道14.5. 条件语句14.6. 循环14.

2、7. 数组14.8. awk的内建函数15. How-to1.awk简介awk是一种 编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正 则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的, 它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏 幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓

3、氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。下面介绍的awk是以GUN的gawk为例的,在 linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍。2.awk命令格式和选项2.1.awk的语法有两种形式 awk options script var=value file(s) awk options -f scriptfile var=value file(s)2.2.命 令选项-F fs or -field-separ

4、ator fs指定输入文件折分隔 符,fs是一个字符串或者是一个正则表达式,如-F:。-v var=value or -asign var=value赋值一个用户定义变量。-f scripfile or -file scriptfile从脚本文件中读 取awk命令。-mf nnn and -mr nnn对 nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准 awk中不适用。-W compact or -compat, -W traditional or -traditional在兼容模式下运行 awk

5、。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。-W copyleft or -copyleft, -W copyright or -copyright打印简短的版权信息。-W help or -help, -W usage or -usage打 印全部awk选项和每个选项的简短说明。-W lint or -lint打 印不能向传统unix平台移植的结构的警告。-W lint-old or -lint-old打印关于不能向传统unix平台移植的结构的警告。-W posix打开兼容模式。但有以下限制,不识别:x、函数关键字、func、 换码序列以及当fs是一个空格时,将新行

6、作为一个域分隔符;操作符*和*=不能代替和=;fflush无效。-W re-interval or -re-inerval允许间隔正则表达式 的使用,参考(grep中的Posix字符类),如括号表达式:alpha:。-W source program-text or -source program-text使用 program-text作为源代码,可与-f命令混用。-W version or -version打印bug报告信息的版本。3.模式和操作awk脚本是由模式和操作组成的:pattern action 如$ awk /root/ test,或$ awk $3 %1选择第二个字段比第一个字

7、段长的行。 模式匹配表达式:用运算符(匹配)和!(不匹配)。 模 式,模式:指定一个行的范围。该语法不能包括BEGIN和END模式。 BEGIN:让用户指定在第一条输入记录被处理之 前所发生的动作,通常可在这里设置全局变量。 END:让用户在最后一条输入记录被读取之后发生的动作。3.2.操作操 作由一人或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。主要有四部份: 变量或数组赋值 输出命令 内 置函数 控制流命令4.awk的环境变量Table1.awk的 环境变量变 量描述$n当前记录的第n个字段,字段间由 FS分隔。$0完整的输入记录。ARGC命 令行参数的数目。ARG

8、IND命令行中当前文件的位置(从0开始算)。ARGV包 含命令行参数的数组。CONVFMT数字转换格式(默认值为%.6g)ENVIRON环 境变量关联数组。ERRNO最后一个系统错误的描述。FIELDWIDTHS字 段宽度列表(用空格键分隔)。FILENAME当前文件名。FNR同 NR,但相对于当前文件。FS字段分隔符(默认是任何空格)。IGNORECASE如 果为真,则进行忽略大小写的匹配。NF当前记录中的字段数。NR当 前记录数。OFMT数字的输出格式(默认值是%.6g)。OFS输 出字段分隔符(默认值是一个空格)。ORS输出记录分隔符(默认值是一个换行符)。RLENGTH由 match函

9、数所匹配的字符串的长度。RS记录分隔符(默认是一个换行符)。RSTART由 match函数所匹配的字符串的第一个位置。SUBSEP数组下标分隔符(默认值是034)。5.awk运算符Table2.运算符运 算符描述= += -= *= /= %= = *=赋值?:C条件表达式|逻 辑或&逻辑与 !匹 配正则表达式和不匹配正则表达式 = != =关 系运算符空格连接+ -加,减* / &乘,除与求余+ - !一元加,减和逻辑非 *求幂+ -增加或减少,作为前缀或后缀$字 段引用in数组成员6.记录和域6.1.记录awk 把每一个以换行符结束的行称为一个记录。记录分隔符:默认的输入和输出的分隔符都是

10、回车,保存在内建变量ORS和RS中。$0 变量:它指的是整条记录。如$ awk print $0 test将输出test文件中的所有记录。变量NR:一个计数器,每处 理完一条记录,NR的值就增加1。如$ awk print NR,$0 test将输出test文件中所有记录,并在记录前显示记录号。6.2.域记 录中每个单词称做“域”,默认情况下以空格或tab分隔。awk可跟踪域的个数,并在内建变量NF中保存该值。如$ awk print $1,$3 test将打印test文件中第一和第三个以空格分开的列(域)。6.3.域分隔符内建变量 FS保存输入域分隔符的值,默认是空格或tab。我们可以通过-

11、F命令行选项修改FS的值。如$ awk -F: print $1,$5 test将打印以冒号为分隔符的第一,第五列的内容。可以同时使用多个域分隔符,这时应该把分隔符写成放到方括号中,如$awk -F:t print $1,$3 test,表示以空格、冒号和tab作为分隔符。输出域的分隔符默认是一个空格,保 存在OFS中。如$ awk -F: print $1,$5 test,$1和$5间的逗号就是OFS的值。7.gawk专用正则表达 式元字符一般通用的元字符集就不讲了,可参考我的Sed和Grep学习笔记。以下几个是gawk专用的,不适合unix版本的awk。Y匹配一 个单词开头或者末尾的空字符

12、串。B匹配单词 内的空字符串。匹配一个单 词的末尾的空字符串,锚定末尾。w匹配一个 字母数字组成的单词。W匹配一个非字母数字 组成的单词。匹配字符串开头的一个空字符 串。匹配字符串末尾的一个空字符串。8.POSIX字符集可 参考我的Grep学习笔记9.匹配操作符()用来在 记录或者域内匹配正则表达式。如$ awk $1 /root/ test将显示test文件第一列中以root开头的行。10.比较表达式conditional expression1 ? expression2: expression3,例如:$ awk max = $1 $3 ? $1: $3: print max test。

13、如果第一个域大于第三个域,$1就赋值给max,否则$3就赋值给max。$ awk $1 + $2 5 & $2 10 test,如果第一个域大于5,并且第二个域小于10,则打印这些行。11.范围模板范 围模板匹配从第一个模板的第一次出现到第二个模板的第一次出现之间所有行。如果有一个模板没出现,则匹配到开头或末尾。如$ awk /root/,/mysql/ test将显示root第一次出现到mysql第一次出现之间的所有行。12.一个验证 passwd文件有效性的例子$ cat /etc/passwd | awk -F: NF != 7printf(line %d,does not have 7 fields:%sn,NR,$0)$1 ! /A-Za-z0-9/printf(line %d,non alpha and numeric user id:%d: %sn,NR,$0)$2 = * printf(line %d, no password: %sn,NR,$0)cat把结果输出给 awk,awk把域之间的分隔符设为冒号。如果域的数量 (NF)不等于7,就执行下面的程序。printf打印字 符串line ? does not have 7

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号