执行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)

最新文章

  1. 学习日记-从爬虫到接口到APP
  2. iOS上架90034问题解决
  3. WebService处理大数据量数据
  4. 关于Function.prototype.bind
  5. 【CImg】三角形绘制算法实现
  6. 编译android程序时DEX过程出现错误
  7. Windows键盘快捷键
  8. Python图片处理PIL/pillow/生成验证码/出现KeyError: 和The _imagingft C module is not installed
  9. SOAP Web 服务介绍
  10. How to include cascading style sheets (CSS) in JSF
  11. Oracle查看用户所在表空间
  12. linux工具问题,tail -f 失效
  13. Canvas get/putImageData
  14. Java集合学习笔记
  15. 手把手教你做个AR涂涂乐
  16. 深入理解php内核 编写扩展_III- 资源
  17. How Many Sets I(容斥定理)
  18. centos 6.8 设置svn钩子同步至web目录
  19. mkdosfs 安装
  20. WinForm中使用BackgroundWorker异步加载数据并使用进度条

热门文章

  1. WDS无线桥接
  2. 1990-D. 幻方
  3. 在线学习SQL语句?没问题~~
  4. 李洪强iOS开发本人集成环信的经验总结_03_注册
  5. 【流媒體】live555—VS2008 下live555编译、使用及测试
  6. ZooKeeper 安装部署及hello world
  7. IIS8报错 403 404
  8. MapReduce编程系列 — 2:计算平均分
  9. Permutation Test 置换检验(转)
  10. 编程之美:1.9高效率安排见面会 图的m着色问题 回溯法