【译】 AWK教程指南 10编写可与用户交互的AWK程序
执行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程序的更多相关文章
- 【译】 AWK教程指南
前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...
- 【译】 AWK教程指南 1前言
前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...
- 【译】 AWK教程指南 附录B-Actions
Actions 是由下列指令(statement)所组成: 表达式 ( 函数调用,赋值...) print 表达式列表 printf( 格式化字符串, 表达式列表) if( 表达式 ) 语句 [els ...
- 【译】 AWK教程指南 11递归程序
awk 中除了函数的参数列表(Argument List)上的参数(Arguments)外,所有变量不管于何处出现,全被视为全局变量.其生命持续至程序结束——该变量不论在function外或 func ...
- 【译】 AWK教程指南 7AWK应用实例
本节将示范一个统计上班到达时间及迟到次数的程序. 这程序每日被执行时将读入两个数据文件: * 员工当日到班时间的数据文件 ( 如下列的 arr.dat ) * 存放员工当月迟到累计次数的文件 当程序执 ...
- 【译】 AWK教程指南 3计算并打印文件中指定的字段数据
awk 处理数据时,它会自动从数据文件中一次读取一条记录,并会将该记录切分成一个个的字段:程序中可使用 $1, $2,... 直接取得各个字段的内容.这个特色让使用者易于用 awk 编写 reform ...
- 【译】 AWK教程指南 2概述
2.1 为什么用AWK 由于awk具有上述特色,在问题处理的过程中,可轻易使用awk来撰写一些小工具:这些小工具并非用来解决整个大问题,它们只扮演解决个别问题过程的某些角色,可通过Shell所提供的p ...
- 【译】 AWK教程指南 9读取命令行上的参数
大部分的应用程序都允许使用者在命令之后增加一些选择性的参数.执行awk时这些参数大部分用于指定数据文件文件名,有时希望在程序中能从命令行上得到一些其它用途的数据.本小节中将叙述如何在awk程序中取用这 ...
- 【译】 AWK教程指南 5AWK中的数组
awk程序中允许使用字符串当做数组的下标(index).利用这个特色十分有助于资料统计工作.(使用字符串当下标的数组称为Associative Array) 首先建立一个数据文件,并取名为 reg.d ...
随机推荐
- ng-blur失去焦点执行事件
<label class="item item-input item-stacked-label"> <span class="input-label& ...
- ionicPopup弹出列表选择对话框
//显示vm.selectWarehouse = function() { vm.popupForWarehouse = $ionicPopup.show({ template: '<div c ...
- Struts2自定义拦截器实例—登陆权限验证
版本:struts2.1.6 此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面. ...
- <span> <div> 局部 keydown ,keyup事件。页面部分div $(document) 无效,可能焦点,添加焦点。
前天改一个bug, js 实现的一个 面板拖拉,左右各两个列表,中间面板画线连接,页面左侧列表选中后,key 事件无效.右侧选中确有效,很奇怪,查看源码,左侧选中后,$(document).on(&q ...
- 【leetcode】Word Ladder II(hard)★ 图 回头看
Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...
- http://wenku.baidu.com/link?url=UGoPtZviipHzi5SDIlGx6hPFWAHTPLFXcZ7ieD15JMd81DEHqjehvphVMhqELmOK4qXR74dTT9nW8VBoApBc7Kfb1ZWrNF_i24fY1YRHVki
http://wenku.baidu.com/link?url=UGoPtZviipHzi5SDIlGx6hPFWAHTPLFXcZ7ieD15JMd81DEHqjehvphVMhqELmOK4qXR ...
- UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法
首先,视图控制器必须得实现协议UIAlertViewDelegate中的方法,并指定delegate为self,才能使弹出的Alert窗口响应点击事件. 具体代码如下: ViewController. ...
- ajax跨域访问的解决方案
今天的工作中要访问摄像机内部的一个web站点,这就涉及到jquery的ajax跨域访问的问题.我使用的是jquery1.7的版本,下面总结如下: 问题一:一开始用IE调试,总是返回No Transpo ...
- Servlet课程0426(九)Servlet服务器端创建Cookie和客户端读取Cookie
服务器端创建Cookie: Win7默认Cookie位置 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies Cookie ...
- 解决git Push时请求username和password,而不是ssh-key验证
转载自:https://blog.lowstz.org/posts/2011/11/23/why-git-push-require-username-password-github/ 之前开始用git ...