Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

GAWK 手册(二)

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

第二章 简介

  gawk 的主要功能是针对档案的每一行(line)搜寻指定的 patterns 。当一行里有符合指定的 patterns,gawk 就会在此一行执行被指定的 actions。 gawk 依此方式处理输入档案的每一行直到输入档案结束。

  gawk 程式是由很多的 pattern 与 action 所组成,action 写在大括号 { } 里面,一个pattern後面就跟著一个action。整个 gawk 程式会像下面的样子:


pattern {action} 
pattern {action} 

  在 gawk 程式里面的规则,pattern 或 action 能够被省略,但是两个不能同时被省略。如果 pattern 被省略,对於输入档里面的每一行,action 都会被执行。如果 action 被省略,内定的 action则会印出所有符合 pattern 的输入行。

2.1 如何执行gawk程式

  基本上,有2个方法可以执行gawk程式。

  如果 gawk 程式很短,则 gawk 可以直接写在 command line,如下所示:

gawk 'program' input-file1 input-file2 ... 

  其中 program 包括一些 pattern 和 action。

  如果 gawk 程式较长,较为方便的做法是将 gawk 程式存在一个档案, 即 patterns 与 actions 写在档名为 program-file 的档案里面,执行gawk 的格式如下所示:

gawk -f program-file input-file1 input-file2 ... 

  gawk 程式的档案不止一个时,执行gawk 的格式如下所示:


gawk -f program-file1 -f program-file2 ... input-file1 
input-file2 ... 

2.2 一个简单的例子

  现在我们举一个简单的例子,因为 gawk 程式很短,所以将 gawk 程式直接写在 command line。

gawk '/foo/ {print $0}' BBS-list 

  实际的 gawk 程式为 /foo/ {print $0}。/foo/ 为 pattern,意思为搜寻输入档里的每一行是否含有子字串 'foo',如果含有 'foo' 则执行 action。

  action 为 print $0,是将现在这一行的内容印出。BBS-list 是输入的档案。

  执行完上述指令後,会印出下面的结果:


fooey 555-1234 2400/1200/300 B 
foot 555-6699 1200/300 B 
macfoo 555-6480 1200/300 A 
sabafoo 555-2127 1200/300 C 

2.3 一个较复杂的例子

gawk '$1 == "Feb" {sum=$2+$3} END {print sum}' shipped 

  现在这个例子会将输入档 'shipped' 的第一个栏位与 "Feb" 做比较,如果相等,则其对应的第2栏位与第3栏位的值会被加到变数 sum。 对於输入档的每一行重复上述的动作,直到输入档的每一行都被处理过为止。最後将 sum 的值印出。END {print sum} 的意思为在所有的输入读完之後,执行一次 print sum 的动作,也就是把 sum 的值印出。

  下面是执行的结果:

84 



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:GAWK 手册(一)   下一篇:GAWK 手册(三)

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号