没有合适的资源?快使用搜索试试~ 我知道了~
首页awk编程入门指南:问题解决与高效利用
"《awk入门到精通》是一本针对初学者的教程,旨在帮助读者理解和掌握awk编程语言。该手册首先介绍awk的基本背景,强调awk适合解决的问题类型和常见解题模式。awk的特点包括无需编译、变量类型灵活(支持关联数组)、擅长处理数据行和字段、内置管道功能等,这些特性使其在处理文本数据和利用系统资源方面表现出色。 学习本书前,读者需要具备一定的UNIX环境基础,比如文件操作、文件复制、管道和输入/输出重定向等概念,以及对C语言基本语法和流程控制指令的理解。虽然awk指令与C语言类似,但手册主要关注awk的实际应用,对于C语言的详细语法会在必要时提供参考链接。 awk本身是一种简洁、高效的脚本语言,特别适合编写小型工具,这些工具能够作为解决方案的一部分,通过管道与其他工具协作,解决复杂问题。这种方式鼓励读者以抽象思维处理问题,而不是陷入具体细节,有助于提高问题解决的灵活性和代码复用性。 本手册主要侧重于awk的基础知识,包括语法、指令和函数的使用,以及编写简单程序的步骤。深入的解题策略和应用实例将延伸至后续的UNIX进阶教程中。通过跟随手册中的范例进行实践,读者能够迅速掌握awk,为进一步开发高效脚本打下坚实的基础。"
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/21478243/bg7.jpg)
若修"O.S."的人数增加一人,则 Number["O.S."] = Number["O.S."] + 1 或 Number["O.S."]++ .
如何取出数组中储存的信息
以 C 语言为例, 声明 int Arr[100]; 之后, 若想得知 Arr[ ]中所储存的数据, 只须用一个循环,
如 :
for(i=0; i<100; i++) printf("%d\n", Arr[i]);
即可. 上式中:
数组 Arr[ ] 的下标 : 0, 1, 2,..., 99
数组 Arr[ ] 中各下标所对应的值 : Arr[0], Arr[1],...Arr[99]
但 awk 中使用数组并不须事先宣告. 以刚才使用的 Number[ ] 而言, 程序执行前, 并不知将来
有哪些课程名称可能被当成 Number[ ] 的下标.
awk 提供了一个指令, 藉由该指令awk会自动找寻数组中使用过的所有下标. 以 Number[ ] 为
例, awk将会找到 "O.S.", "Arch.",...
使用该指令时, 须指定所要找寻的数组, 及一个变量. awk会使用该的变量来记录从数组中找到
的每一个下标. 例如
for(course in Number){....}
指定用 course 来记录 awk 从Number[ ] 中所找到的下标. awk每找到一个下标时, 就用course记
录该下标之值且执行{....}中之指令. 藉由这个方式便可取出数组中储存的信息.
(详见下例)
[ 范例 : ] 统计各科修课人数,并印出结果.
建立如下程序,并取名为 course.awk:
{ for( i=2; i <= NF; i++) Number[$i]++ }
END{for(course in Number) printf("%10s %d\n", course, Number[course] )}
执行下列命令 :
$awk -f course.awk reg.dat
执行结果如下 :
Graphics 2
O.S. 2
Discrete 3
A.I. 1
D.S. 1
Arch. 2
Algorithm 2
[ 说 明 : ]
这程序包含二个Pattern { Actions }指令.
{ 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.
页码,7/40(W)
w
仅学习使用,请勿转载
![](https://csdnimg.cn/release/download_crawler_static/21478243/bg8.jpg)
唯一不同的是: "以 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上的命令, 并将该命令送
往Shell执行, 执行的结果(原先应于屏幕印出者)则藉由pipe送进awk程序中.
getline为awk所提供的输入指令.
其语法如下 :
注一 : 当 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 )
存放员工当月迟到累计次数的文件.
当程序执行执完毕后将更新第二个文件的数据(迟到次数), 并打印当日的报表.这程序将分成下
语法 由何处读取数据 数据读入后置于
getline var < file 所指定的 file 变量 var(var省略时,表示置于$0)
getline var pipe 变量 变量 var(var省略时,表示置于$0)
getline var
见 注一
变量 var(var省略时,表示置于$0)
页码,8/40(W)
w
仅学习使用,请勿转载
剩余39页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/17abee78a3ef4024ad2bc8263f71c5ed_xixixixixixixi21.jpg!1)
自不量力的A同学
- 粉丝: 762
- 资源: 2785
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 新型矿用本安直流稳压电源设计:双重保护电路
- 煤矿掘进工作面安全因素研究:结构方程模型
- 利用同位素位移探测原子内部新型力
- 钻锚机钻臂动力学仿真分析与优化
- 钻孔成像技术在巷道松动圈检测与支护设计中的应用
- 极化与非极化ep碰撞中J/ψ的Sivers与cos2φ效应:理论分析与COMPASS验证
- 新疆矿区1200m深孔钻探关键技术与实践
- 建筑行业事故预防:综合动态事故致因理论的应用
- 北斗卫星监测系统在电网塔形实时监控中的应用
- 煤层气羽状水平井数值模拟:交替隐式算法的应用
- 开放字符串T对偶与双空间坐标变换
- 煤矿瓦斯抽采半径测定新方法——瓦斯储量法
- 大倾角大采高工作面设备稳定与安全控制关键技术
- 超标违规背景下的热波动影响分析
- 中国煤矿选煤设计进展与挑战:历史、现状与未来发展
- 反演技术与RBF神经网络在移动机器人控制中的应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)