---china.pub.com linux shell电子书学习笔记

9.2 awk脚本

在命令中调用a w k时,a w k脚本由各种操作和模式组成。
如果设置了- F选项,则a w k每次读一条记录或一行,并使用指定的分隔符分隔指定域,但
如果未设置- F选项,a w k假定空格为域分隔符,并保持这个设置直到发现一新行。当新行出现
时,a w k命令获悉已读完整条记录,然后在下一个记录启动读命令,这个读进程将持续到文件
尾或文件不再存在。
参照表9 - 1,a w k每次在文件中读一行,找到域分隔符(这里是符号 #) ,设置其为域n,直
至一新行(这里是缺省记录分隔符) ,然后,划分这一行作为一条记录,接着 a w k再次启动下
一行读进程。

 


shell学习笔记 (9.2)_休闲

 

9.2.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将打印出所有浏览出来的记录。

9.2.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. 保存a w k输出

有两种方式保存s h e l l提示符下a w k脚本的输出。最简单的方式是使用输出重定向符号 >文
件名,下面的例子重定向输出到文件w o w。