【译】 AWK教程指南 6在AWK程序中使用Shell命令

  awk程序中允许调用Shell指令,并提供管道解决awk与系统间数据传递的问题。所以awk很容易使用系统资源,读者可利用这个特点来编写某些适用的系统工具。

范例:写一个awk程序来打印出线上人数。

  将下列程序建文件,命名为 count.awk

    BEGIN {
      while( "who" | getline ) 
        n++
      print n     }

  并执行下列命令:   

    $ awk -f count.awk

   执行结果将会打印出目前在线人数。

 

说 明:

  1. awk 程序并不一定要处理数据文件,以本例而言,仅输入程序文件count.awk,未输入任何数据文件。

  2. BEGIN 和 END 同为awk中的一种 Pattern。以 BEGIN 为 Pattern的Actions,只有在awk开始执行程序、尚未打开任何输入文件前, 被执行一次。(注意:只被执行一次)

  3. "|" 为 awk 中表示管道的符号。awk 把 管道 之前的字符串"who"当成Shell上的命令,并将该命令送往Shell执行,执行的结果(原先应打印在屏幕上的)则通过pipe送进awk程序中。

  4. getline为awk所提供的输入指令。

  其语法如下:

语法

由何处读取数据

数据读入后置于

getline var < file

所指定的 file

变量 var(var省略时,表示置于$0)

 | getline var

pipe 

变量 var(var省略时,表示置于$0)

getline var

见 注一

变量 var(var省略时,表示置于$0)

  注一:当 Pattern 为 BEGIN 或 END 时,getline 将由 stdin 读取数据,否则由awk正处理的数据文件上读取数据。

  getline 一次读取一行数据,若读取成功则return 1;

                 若读取失败则return -1;

                 若遇到文件结束(EOF),则return 0。

  本程序使用 getline 所 return 的数据来做为 while 判断循环停止的条件,某些awk版本较旧,并不容许使用者改变 $0 的值。这种版的 awk 执行本程序时会产生 Error,读者可于 getline 之后置上一个变量 (如此,getline 读进来的数据便不会被置于 $0 ),或直接改用gawk便可解决。

转载于:https://www.cnblogs.com/qieerbushejinshikelou/p/3705512.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值