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