执行awk程序时,awk会自动从文件中读取数据来进行处理,直到文件结束。只要将awk读取数据的来源改成键盘输入,便可设计与awk 交互的程序。本节将提供一个该类程序的范例。

范例:本节将编写一个英语生字测验的程序,它将印出中文字意,再由使用者回答其英语生字。

  首先编辑一个数据文件 test.dat (内容不限,格式如下)    

    apple      苹果
    orange     柳橙
    banana     香蕉
    pear      梨子
    starfruit   杨桃
    bellfruit   莲雾
    kiwi      奇异果
    pineapple   菠萝
    watermelon   西瓜

  编辑awk程序"c2e"如下:

    awk '
    BEGIN {
      while( getline < ARGV[] ){ #由指定的文件中读取测验数据
        English[++n] = $      #最后, n 将表示题目的题数
        Chinese[n] = $
      }
      ARGV[] = "-"   # "-"表示由stdin(键盘输入)
      srand()      # 以系统时间为随机数启始的种子
      question()     #产生考题
    }
    {# awk自动读入由键盘上输入的数据(使用者回答的答案)
      if( $ != English[ind] )
        print "Try again!"
      else{
        print "\nYou are right !! Press Enter to Continue --- "
        getline
        question()  #产生考题
      }
    }
    function question(){
      ind = int(rand()* n) + #以随机数选取考题
      system("clear")
      print " Press \"ctrl-d\" to exit"
      printf("\n%s ", Chinese[ind] " 的英文生字是: ")
    }
    ' $*

  执行时输入如下指令:    

    $./c2e test.dat

  屏幕将产生如下的画面:

        

  若输入 starfruit

  程序将产生

        

说明:

  1. 参数 test.dat (ARGV[1]) 表示储存考题的数据文件文件名。awk 由该文件上取得考题资料后,将 ARGV[1] 改成 "-"。

  "-" 表示由 stdin(键盘输入) 数据。键盘输入数据的结束符号 (End of file)是 ctrl-d。当 awk 读到 ctrl-d 时就停止由 stdin 读取数据。

  2. awk的数学函数中提供两个与随机数有关的函数。

    rand( ): 返回介于 0与1之间的(近似)随机数值。 0 < rand() < 1.

         除非使用者自行制定rand()函数起始的seed,否则每次执行awk程序时,rand()都将以同一个内定的seed为起始。

    srand(x):制定以x作为rand()函数起始的种子。若省略了x,则awk会以执行时的日期与时间为rand()函数起始的seed。(参考附录 C AWK的Built-in Functions)

【译】 AWK教程指南 10编写可与用户交互的AWK程序的更多相关文章

  1. 【译】 AWK教程指南

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

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

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

  3. 【译】 AWK教程指南 附录B-Actions

    Actions 是由下列指令(statement)所组成: 表达式 ( 函数调用,赋值...) print 表达式列表 printf( 格式化字符串, 表达式列表) if( 表达式 ) 语句 [els ...

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

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

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

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

  6. 【译】 AWK教程指南 3计算并打印文件中指定的字段数据

    awk 处理数据时,它会自动从数据文件中一次读取一条记录,并会将该记录切分成一个个的字段:程序中可使用 $1, $2,... 直接取得各个字段的内容.这个特色让使用者易于用 awk 编写 reform ...

  7. 【译】 AWK教程指南 2概述

    2.1 为什么用AWK 由于awk具有上述特色,在问题处理的过程中,可轻易使用awk来撰写一些小工具:这些小工具并非用来解决整个大问题,它们只扮演解决个别问题过程的某些角色,可通过Shell所提供的p ...

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

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

  9. 【译】 AWK教程指南 5AWK中的数组

    awk程序中允许使用字符串当做数组的下标(index).利用这个特色十分有助于资料统计工作.(使用字符串当下标的数组称为Associative Array) 首先建立一个数据文件,并取名为 reg.d ...

随机推荐

  1. ng-blur失去焦点执行事件

    <label class="item item-input item-stacked-label"> <span class="input-label& ...

  2. ionicPopup弹出列表选择对话框

    //显示vm.selectWarehouse = function() { vm.popupForWarehouse = $ionicPopup.show({ template: '<div c ...

  3. Struts2自定义拦截器实例—登陆权限验证

    版本:struts2.1.6 此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面. ...

  4. <span> <div> 局部 keydown ,keyup事件。页面部分div $(document) 无效,可能焦点,添加焦点。

    前天改一个bug, js 实现的一个 面板拖拉,左右各两个列表,中间面板画线连接,页面左侧列表选中后,key 事件无效.右侧选中确有效,很奇怪,查看源码,左侧选中后,$(document).on(&q ...

  5. 【leetcode】Word Ladder II(hard)★ 图 回头看

    Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...

  6. http://wenku.baidu.com/link?url=UGoPtZviipHzi5SDIlGx6hPFWAHTPLFXcZ7ieD15JMd81DEHqjehvphVMhqELmOK4qXR74dTT9nW8VBoApBc7Kfb1ZWrNF_i24fY1YRHVki

    http://wenku.baidu.com/link?url=UGoPtZviipHzi5SDIlGx6hPFWAHTPLFXcZ7ieD15JMd81DEHqjehvphVMhqELmOK4qXR ...

  7. UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法

    首先,视图控制器必须得实现协议UIAlertViewDelegate中的方法,并指定delegate为self,才能使弹出的Alert窗口响应点击事件. 具体代码如下: ViewController. ...

  8. ajax跨域访问的解决方案

    今天的工作中要访问摄像机内部的一个web站点,这就涉及到jquery的ajax跨域访问的问题.我使用的是jquery1.7的版本,下面总结如下: 问题一:一开始用IE调试,总是返回No Transpo ...

  9. Servlet课程0426(九)Servlet服务器端创建Cookie和客户端读取Cookie

    服务器端创建Cookie: Win7默认Cookie位置 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies Cookie ...

  10. 解决git Push时请求username和password,而不是ssh-key验证

    转载自:https://blog.lowstz.org/posts/2011/11/23/why-git-push-require-username-password-github/ 之前开始用git ...