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

GAWK 手册(三)

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

第三章 读取输入档案

  gawk的输入可以从标准输入或指定的档案里读取。输入的读取单位被称为”记录”(records),gawk 在做处理时,是一个记录一个记 (p9 of 46) 录地处理。每个记录的内定值是一行(line),一个记录又被分为多个栏位(fields)。

3.1 如何将输入分解成记录(records)

  gawk 语言会把输入分解成记录(record)。记录与记录之间是以 record separator 隔开,record separator 的内定值是表示新一行的 字元(newline character),因此内定的 record separator 使得文字的每一行是一个记录。

  record separator 随著内建变数 RS 的改变而改变。RS 是一个字串, 它的内定值是" "。仅有 RS 的第一个字元是有效的,它被当作 record separator,而 RS 的其它字元会被忽略。

  内建变数 FNR 会储存目前的输入档案已颈欢寥〉募锹贾鍪D 建变数 NR 会储存目前为止所有的输入档案已颈欢寥〉募锹贾鍪

3.2 栏位(field)

  gawk 会自动将每个记录分解成多个栏位 (field)。类似於字在一行里面,gawk 的内定动作会认为栏位之间是以 whitespace 分开。在gawk 里,whitespace 的意思是一个或多个空白或 tabs。

  在 gawk 程式里面,以'$1'表示第一个栏位,'$2'表示第二个栏位 ,依此类推。举个例子,假设输入的一行如下所示:

This seems like a pretty nice example. 

  第一个栏位或 $1 是'This',第二个栏位或 $2 是 'seems',依此类推。

  有个地方值得特别注意,第七个栏位或 $7 是'example.'而非'example'。

  不论有多少栏位,$NF 可用来表示一个记录的最後一个栏位。以上面的例子为例,$NF 与 $7 相同,也就是'example.'。

  NF 是一个内建变数,它的值表示目前这个记录之栏位的个数。 $0,看起来好像是第零个栏位,它是一个特例,它表示整个记录。

  下面是一个较复杂的例子:


gawk '$1~/foo/ {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 

  这个例子是把输入档'BBS-list'的每个记录的第一个栏位作检查,如果它含有子字串'foo',则这一个记录会被印出。

3.3 如何将记录分解成栏位

  gawk 根据 field separator 将一个记录分解成栏位。field sepa- rator 以内建变数 FS 表示。

  举个例子,假如 field separator 是'oo',则下面的行:

moo goo gai pan 

  会被分成三个栏位:'m'、' g'、' gai pan'。

  在 gawk 程式里,可以使用'='来改变 FS 的值。例如:

gawk 'BEGIN {FS=","}; {print $2}' 

  输入行如下:

John Q. Smith, 29 Oak St., Walamazoo, MI 42139 

  执行gawk的结果将印出字串 ' 29 Oak St.'。BEGIN 後面的 action 会在第一个记录被读取之前执行一次。




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



上一篇:GAWK 手册(二)   下一篇:GAWK 手册(四)

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