没有合适的资源?快使用搜索试试~ 我知道了~
首页掌握awk编程:中文版学习指南
掌握awk编程:中文版学习指南
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 143 浏览量
更新于2024-07-05
收藏 363KB PDF 举报
" awk+手册中文版归纳.pdf" 是一本针对awk编程语言的简体中文学习指南,由bones7456整理自互联网上的原始资源。awk是一种强大的文本处理工具,特别适合在UNIX环境下工作,它的主要特点是无需编译即可执行(直译器),支持无类型变量和关联数组(字典式数组)。该手册旨在帮助读者理解awk适用于何种问题以及常见解题方法,通过一系列由浅入深的范例和解释,使读者能够迅速掌握awk的使用技巧。 手册强调读者应具备一定的背景知识,包括基本的UNIX操作技能,如文件管理、复制、管道和输入/输出重定向等。同时,对C语言基础的理解也很重要,因为awk的许多指令与C语言类似,但手册不会详述这些已熟知的部分,鼓励读者参考C语言教材进行深入研究。 awk本身具有处理文本数据的强大能力,尤其是数据行和字段结构,而且内置了管道功能,允许数据在处理过程中传递。手册通过实例展示awk的语法和指令,辅助读者理解,并鼓励实践操作以深化理解。尽管原始资源可能有些过时,但经过整理后的版本在ubuntu7.04系统上测试通过,使用的awk是mawk版本。作者承认可能存在错误和不足,欢迎读者提出指正,以便不断优化。 这本手册是学习awk的实用资源,对于希望提高文本处理效率,特别是对数据行和字段操作感兴趣的程序员来说,提供了重要的学习路径。
资源详情
资源推荐
9
{ for( i=2; i <= NF; i++) Number[$i]++ }
END{for(course in Number) printf("%10s %d\n", course, Number[course] )}
第一个 Pattern { Actions } 指令中省略了 Pattern 部分. 故随着
每笔数据行的读入其 Actions 部分将逐次无条件被执行 .
以 awk 读入第一笔资料 " Mary O.S. Arch. Discrete" 为例 , 因为该笔数据 NF = 4( 有 4 个字
段), 故该 Action 的 for Loop 中 i = 2,3,4.
i $i 最初 Number[$i] Number[$i]++ 之后
i=2 时 $i="O.S." Number["O.S."] 的值从默认的 0,变成了 1 ;
i=3 时 $i="Arch." Number["Arch."] 的值从默认的 0,变成了 1 ;
同理 ,i=4 时 $i="Discrete" Number["Discrete"] 的值从默认的 0,变成了 1 ;
第二个 Pattern { Actions } 指令中 END 为 awk 之保留字 , 为 Pattern 的一种 .
END 成立 (其值为 true)的条件是 : "awk 处理完所有数据 , 即将离开程序时 . "
平常读入数据行时 , END 并不成立 , 故其后的 Actions 并不被执行 ;
唯有当 awk 读完所有数据时 , 该 Actions 才会被执行 ( 注意 , 不管数据行有多少笔 , END 仅
在最后才成立 , 故该 Actions 仅被执行一次 .)
BEGIN 与 END 有点类似 , 是 awk 中另一个保留的 Pattern.
唯一不同的是 : "以 BEGIN 为 Pattern 的 Actions 于程序一开始执行时 , 被执行一次 ."
NF 为 awk 的内建变量 , 用以表示 awk 正处理的数据行中 , 所包含的字段个数 .
awk 程序中若含有以 $ 开头的自定变量 , 都将以如下方式解释 :
以 i= 2 为例 , $i = $2 表第二个字段数据 . ( 实际上 , $ 在 awk 中为一运算符 (Operator), 用
以取得字段数据 .)
6. awk 程序中使用 Shell 命令
awk 程序中允许呼叫 Shell 指令 . 并提供管道解决 awk 与系统间数据传递的问题 . 所以 awk
很容易使用系统资源 . 读者可利用这个特点来编写某些适用的系统工具 .
[ 范例 : ] 写一个 awk 程序来打印出线上人数 .
将下列程序建文件 , 命名为 count.awk
BEGIN {
while ( "who" | getline ) n++
print n
}
并执行下列命令 :
awk -f count.awk
执行结果将会印出目前在线人数
[ 说 明 : ]
awk 程序并不一定要处理数据文件 . 以本例而言 , 仅输入程序文件 count.awk, 未输入任何
数据文件 .
BEGIN 和 END 同为 awk 中的一种 Pattern. 以 BEGIN 为 Pattern 的 Actions ,只有在 awk
开始执行程序 ,尚未开启任何输入文件前 , 被执行一次 .(注意 : 只被执行一次 )
"|" 为 awk 中表示管道的符号 . awk 把 | 之前的字符串 "who" 当成 Shell 上的命令 , 并将该
10
命令送往 Shell 执行 , 执行的结果 (原先应于屏幕印出者 )则藉由 pipe 送进 awk 程序中 .
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 便可解决 .
7. awk 程序的应用实例
本节将示范一个统计上班到达时间及迟到次数的程序 .
这程序每日被执行时将读入二个文件 :
员工当日到班时间的数据文件 ( 如下列之 arr.dat )
存放员工当月迟到累计次数的文件 .
当程序执行执完毕后将更新第二个文件的数据 (迟到次数 ), 并打印当日的报表 .这程序将分
成下列数小节逐步完成 , 其大纲如下 :
[7.1] 在到班资料文件 arr.dat 之前增加一行抬头
"ID Number Arrvial Time", 并产生报表输出到文件 today_rpt1 中.
< 思考 : 在 awk 中如何将数据输出到文件 >
[7.2] 将 today_rpt1 上的数据按员工代号排序 , 并加注执行当日日期 ; 产生文件 today_rpt2
<思考 awk 中如何运用系统资源及 awk 中 Pipe 之特性 >
[7.3] 将 awk 程序包含在一个 shell script 文件中
[7.4] 于 today_rpt2 每日报表上 , 迟到者之前加上 "*", 并加注当日平均到班时间 ;
产生文件 today_rpt3
[7.5] 从文件中读取当月迟到次数 , 并根据当日出勤状况更新迟到累计数 .
<思考 使用者在 awk 中如何读取文件数据 >
某公司其员工到勤时间档如下 , 取名为 arr.dat. 文件中第一栏为员工代号 , 第二栏为到达时
间. 本范例中 , 将使用该文件为数据文件 .
1034 7:26
1025 7:27
1101 7:32
剩余47页未读,继续阅读
csh18750931974
- 粉丝: 0
- 资源: 8万+
下载权益
电子书特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- zlib-1.2.12压缩包解析与技术要点
- 微信小程序滑动选项卡源码模版发布
- Unity虚拟人物唇同步插件Oculus Lipsync介绍
- Nginx 1.18.0版本WinSW自动安装与管理指南
- Java Swing和JDBC实现的ATM系统源码解析
- 掌握Spark Streaming与Maven集成的分布式大数据处理
- 深入学习推荐系统:教程、案例与项目实践
- Web开发者必备的取色工具软件介绍
- C语言实现李春葆数据结构实验程序
- 超市管理系统开发:asp+SQL Server 2005实战
- Redis伪集群搭建教程与实践
- 掌握网络活动细节:Wireshark v3.6.3网络嗅探工具详解
- 全面掌握美赛:建模、分析与编程实现教程
- Java图书馆系统完整项目源码及SQL文件解析
- PCtoLCD2002软件:高效图片和字符取模转换
- Java开发的体育赛事在线购票系统源码分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功