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便可解决。

【译】 AWK教程指南 6在AWK程序中使用Shell命令的更多相关文章

  1. 在程序中执行shell命令

    在linux系统下的操作中我们会经常用到shell命令来进行,一开始学习进程的时候对于shell命令也进行了思考,认为shell命令就是一个进程的外壳,经过了后来的学习对于这一点也有了更多的认识. 用 ...

  2. 【译】 AWK教程指南

    前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...

  3. 【译】 AWK教程指南 9读取命令行上的参数

    大部分的应用程序都允许使用者在命令之后增加一些选择性的参数.执行awk时这些参数大部分用于指定数据文件文件名,有时希望在程序中能从命令行上得到一些其它用途的数据.本小节中将叙述如何在awk程序中取用这 ...

  4. 【译】 AWK教程指南 7AWK应用实例

    本节将示范一个统计上班到达时间及迟到次数的程序. 这程序每日被执行时将读入两个数据文件: * 员工当日到班时间的数据文件 ( 如下列的 arr.dat ) * 存放员工当月迟到累计次数的文件 当程序执 ...

  5. Awk中调用shell命令

    Awk中调用shell命令 需求 在awk中,有时候需要调用linux系统中命令,如计算字符串的MD5值,并保存下来. 方法参考 call a shell command from inside aw ...

  6. linux c程序中获取shell脚本输出的实现方法

    linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作. ...

  7. linux C程序中获取shell脚本输出(如获取system命令输出)

    转载自 http://blog.csdn.net/hjxhjh/article/details/7909518 1. 前言 Unix 界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些 ...

  8. 【译】 AWK教程指南 11递归程序

    awk 中除了函数的参数列表(Argument List)上的参数(Arguments)外,所有变量不管于何处出现,全被视为全局变量.其生命持续至程序结束——该变量不论在function外或 func ...

  9. 【译】 AWK教程指南 1前言

    前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...

随机推荐

  1. 慎用ReentrantLock

    前言: 代码简洁与性能高效无法两全其美,本文章专注于并发程序的性能,如果您追求代码简洁,本文章可能不太适合,本文章属于Java Concurrency in Practice读书笔记. 在java5中 ...

  2. 3.8 spring - AbstractBeanDefinition 介绍

    之前,我们已尽完成了xml 文档到 GenericBeanDefinition的转换, 也就是说,到这里,所有的配置都可以在GenericBeanDefinition 的实例中找到对应的配置. Gen ...

  3. Jenkins任务启动的后台进程被自动kill

    在Jenkins的使用中,遇到过的一个场景是:在web代码更改之后,能自动的部署到测试服务器,我们写了run.sh脚本来重启服务,在使用Jenkins的任务自动跑这个脚本后发现,服务没有起来.开始以为 ...

  4. MVC项目总结(别人的好文章)

    引用 http://www.cnblogs.com/xling/archive/2012/07/11/2587002.html

  5. linux配置防火墙详细步骤(iptables命令使用方法)

    通过本教程操作,请确认您能使用linux本机.如果您使用的是ssh远程,而又不能直接操作本机,那么建议您慎重,慎重,再慎重! 通过iptables我们可以为我们的Linux服务器配置有动态的防火墙,能 ...

  6. SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-005-Pizza例子的订单流程()

    一. 1.订单流程定义文件order-flow.xml <?xml version="1.0" encoding="UTF-8"?> <flo ...

  7. 屏蔽QQ聊天对话框中的广告

    原文地址: 怎么在QQ聊天对话框中屏蔽广告_百度经验 http://jingyan.baidu.com/article/48a42057ca12c1a924250402.html     QQ已经成为 ...

  8. *IntelliJ IDEA使用Hibernate连接数据库

    在IntelliJ IDEA中配置MySQL Database.

  9. 172. Factorial Trailing Zeroes

    题目: Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in ...

  10. SGU 168

    SGU 168,寻找矩阵中右上方,右方,下方最小的元素,采用动态规划解答. #include <iostream> #include <vector> #include < ...