Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1765023
  • 博文数量: 293
  • 博客积分: 10574
  • 博客等级: 上将
  • 技术积分: 5085
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-22 17:00
文章分类

全部博文(293)

文章存档

2011年(27)

2010年(84)

2009年(62)

2008年(120)

我的朋友

分类:

2010-11-23 18:40:54

getline函数说明:

A.getline从整体上来说,应这么理解它的用法:
          当其左右无重定向符 | 或 < 时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量
          var 或$0(无变量);应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到
          的返回结果是隔行的。
          当其左右有重定向符 | 或 < 时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被
          awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。


B.getline用法大致可分为三大类(每大类又分两小类),即总共有6种用法。代码如下:

  1. nawk ‘BEGIN{“cat data.txt”|getline d; print d}’ data2.txt
  2. nawk ‘BEGIN{“cat data.txt”|getline; print $0}’ data2.txt
  3. nawk ‘BEGIN{getline d < “data.txt”; print d}’ data2.txt
  4. nawk ‘BEGIN{getline < “data.txt”; print $0}’ data2.txt
以上四行代码均实现“只打印data.txt文件的第一行”(若打印全部行,用循环)
eg.
  1. nawk ‘BEGIN{FS=”:”;while(getline<”/etc/passwd”>0){print $1}}’ data.txt
  1. nawk ‘{getline d; print d”#”$3}’ data.txt
awk首先读入第一行,接着处理getline函数,然后把下一行指定给变量d,再先打印d,由于d后面有换行符,所以后面紧跟的#会覆盖d,后面的$3同样也会覆盖d。
  1. nawk ‘{getline; print $0”#”$3}’ data.txt
复制代码
awk首先读入第一行接着处理getline函数,然后把下一行指定给$0,现在的$0已经是下一行内容,后面的#和$3(从$0中取)会覆盖$0的内容。

简单地读取一条记录

awk 的 getline语句用于简单地读取一条记录。如果用户有一个数据记录类似两个物理记录,那么getline将尤其有用。它完成一般字段的分离(设置字段变量$0 FNR NF NR)。如果成功则返回1,失败则返回0(到达文件尾)。如果需简单地读取一个文件,则可以编写以下代码:

例:示例getline的使用
  1. {while(getline==1)
  2. {
  3. #process the inputted fields
  4. }
  5. }
也可以使getline保存输入数据在一个字段中,而不是通过使用getline variable的形式处理一般字段。当使用这种方式时,NF被置成0,FNR和NR被增值。
用户也可以使用getline<"filename"方式从一个给定的文件中输入数据,而不是从命令行所列内容输入数据。此时,getline将完成一般字段分离(设置字段变量$0和NF)。如果文件不存在,返回-1,成功,返回1,返回0表示失败。用户可以从给定文件中读取数据到一个变量中,也可以用stdin(标准输入设备)或一个包含这个文件名的变量代替filename。值得注意的是当使用这种方式时不修改FNR和NR。

另一种使用getline语句的方法是从UNIX命令接受输入,例如下面的例子:

例:示例从UNIX命令接受输入
  1. {while("who -u"|getline)
  2. {
  3. #process each line from the who command
  4. }
  5. }
当然,也可以使用如下形式:
  1. "command" | getline variable
转自:
阅读(708) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-24 13:29:48

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com