• 6299阅读
  • 0回复

【原创】awk学习笔记(2) [复制链接]

上一主题 下一主题
离线晋-dragon
 
只看楼主 倒序阅读 楼主  发表于: 2005-11-07
awk脚本
1 、 模式和动作
任何a w k语句都由模式和动作组成。在一个a w k脚本中可能有许多语句。模式部分决定动作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式部分,动作将时刻保持执行状态。
模式可以是任何条件语句或复合语句或正则表达式。模式包括两个特殊字段B E G I N和E N D。使用B E G I N语句设置计数和打印头。B E G I N语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行。E N D语句用来在a w k完成文本浏览动作后打印输出文本总数和结尾状态标志。如果不特别指明模式, a w k总是匹配或打印行数。
实际动作在大括号{ }内指明。动作大多数用来打印,但是还有些更长的代码诸如i f和循环(l o o p i n g)语句及循环退出结构。如果不指明采取动作, a w k将打印出所有浏览出来的记录。
2、 域和记录
a w k执行时,其浏览域标记为$ 1,$ 2 . . . $ n。这种方法称为域标识。使用这些域标识将更容易对域进行进一步处理。
使用$ 1 , $ 3表示参照第1和第3域,注意这里用逗号做域分隔。如果希望打印一个有5个域的记录的所有域,不必指明$ 1 , $ 2 , $ 3 , $ 4 , $ 5,可使用$ 0,意即所有域。Aw k浏览时,到达一新行,即假定到达包含域的记录末尾,然后执行新记录下一行的读动作,并重新设置域分隔。
注意执行时不要混淆符号$和s h e l l提示符$,它们是不同的。
为打印一个域或所有域,使用p r i n t命令。这是一个a w k动作(动作语法用圆括号括起来)。
2.1 抽取域
2.2 保存a w k输出
有两种方式保存s h e l l提示符下a w k脚本的输出。最简单的方式是使用输出重定向符号>;文件名,
$ awk '{print $0}' grade.txt >wow
使用这种方法要注意,显示屏上不会显示输出结果。因为它直接输出到文件。只有在保证输出结果正确时才会使用这种方法。它也会重写硬盘上同名数据。
第二种方法是使用t e e命令,在输出到文件的同时输出到屏幕。在测试输出结果正确与否时多使用这种方法。
awk '{print $0}' grade.txt | tee delete_me_and_die
2.3、 使用标准输入
实际上任何脚本都是从标准输入中接受输入的。 也可使用下述方法:使用重定向方法或管道方法。
2.4、 打印所有记录
$ awk '{print $0}' grade.txt
a w k读每一条记录。因为没有模式部分,只有动作部分{print $0}(打印所有记录),这个动作必须用花括号括起来。上述命令打印整个文件。
2.5、 打印单独记录
假定只打印学生名字和腰带级别,通过查看域所在列,可知为f i e l d - 1和f i e l d - 4,因此可以使用$ 1和$ 4,但不要忘了加逗号以分隔域。
awk '{print $1,$4}' grade.txt
2.6、 打印报告头
打印信息头放置在B E G I N模式部分,因为打印信息头被界定为一个动作,必须用大括号括起来。在a w k查看第一条记录前,信息头被打印。
awk 'BEGIN {print “Name Belt\n-----------------------------------”}
{print $1“\t”,$4}' grade.txt
2.7、 打印信息尾
如果在末行加入end of report信息,可使用E N D语句。E N D语句在所有文本处理动作执行完之后才被执行。E N D语句在脚本中的位置放置在主要动作之后。
awk 'BEGIN {print “Name\n--------”}{print $1} END {“end-of-report”}' grade.txt
2.8、 awk错误信息提示
2.9、 awk 键盘输入
如果在命令行并没有输入文件g r a d e . t x t,将会怎样?
awk 'BEGIN {print “Name\n--------”}{print $1} END{“end-of-report”}'
Name
--------
B E G I N部分打印了文件头,但a w k最终停止操作并等待,并没有返回s h e l l提示符。这是因为a w k期望获得键盘输入。因为没有给出输入文件, a w k假定下面将会给出。如果愿意,顺序输入相关文本,并在输入完成后敲<Ct r l - D >键。如果敲入了正确的域分隔符, a w k会像第一个例子一样正常处理文本。这种处理并不常用,因为它大多应用于大量的打印稿。
3、 awk中正则表达式及其操作
4、 元字符
是a w k中正则表达式匹配操作中经常用到的字符:
\ ^ $ . [] | () * + ?
有两个字符只适用于a w k而不适用于g r e p或s e d。它们是:
+   使用+匹配一个或多个字符。
? 匹配模式出现频率。例如使用/X Y?Z/匹配X Y Z或Y Z。
[ 此贴被XChinux在2005-11-07 10:07重新编辑 ]
我的blog:
http://spaces.msn.com/members/lianyunqing/
快速回复
限100 字节
 
上一个 下一个