- 1
- 0
- 约7.42千字
- 约 9页
- 2023-04-24 发布于上海
- 举报
声明:
声明: 本文的原始版本最初发表于IBM developerWorks,现在所有权归属 Westtech Information Services。本文档是原始文档的更新版本, 包含了 Gentoo Linux 文档团队所做的很多改进。
现在无人积极维护本文档。
Awk 实例,第 2 部分
内容:
记录、循环和数组多行记录
awk 是一种用于读取和处理结构化数据(如系统的/etc/passwd 文件)的极佳工具。/etc/passwd 是 UNIX 用户数据库,并且是用冒号定界的文本文件,它包含许多重要信息,包括所有现有用户帐户和用户标识,以及其它信息。在我的前一篇文章中,我演示了 awk 如何轻松地分析这个文件。我们只须将 FS(字段分隔符)变量设置成:。
正确设置了 FS 变量之后,就可以将 awk 配置成分析几乎任何类型的结构化数据, 只要这些数据是每行一个记录。然而,如果要分析占据多行的记录,仅仅依靠设置 FS 是不够的。在这些情况下,我们还需要修改 RS 记录分隔符变量。RS 变量告诉 awk 当前记录什么时候结束,新记录什么时候开始。
譬如,让我们讨论一下如何完成处理“联邦证人保护计划”所涉及人员的地址列表的任务:
代码 1.1: “联邦证人保护计划”所涉及人员的地址列表
代码 1.1: “联邦证人保护计划”所涉及人员的地址列表
Jimmy the Weasel
100 Pleasant Drive
San Francisco, CA 12345
Big Tony
200 Incognito Ave.
Suburbia, WA 67890
理论上,我们希望 awk 将每 3 行看作是一个独立的记录,而不是三个独立的记录。如果 awk 将地址的第一行看作是第一个字段($1),街道地址看作是第二个字段($2),城市、州和邮政编码看作是第三个字段$3,那么这个代码就会变得很简单。以下就是我们想要得到的代码:
代码 1.2: 从地址新建一个字段
代码 1.2: 从地址新建一个字段
BEGIN {
FS=\n
FS=\n
RS=
}
在上面这段代码中,将FS 设置成\n告诉 awk 每个字段都占据一行。通过将RS 设置成,还会告诉 awk 每个地址记录都由空白行分隔。一旦 awk 知 道是如何格式化输入的,它就可以为我们执行所有分析工作,脚本的其余部分很简单。让我们研究一个完整的脚本,它将分析这个地址列表,并将每个记录打印在一 行上,用逗号分隔每个字段。
代码 1.3: 完整的脚本
代码 1.3: 完整的脚本
BEGIN {
FS=\n RS=
}
{ print $1 , $2 , $3 }
如果这个脚本保存为 address.awk,地址数据存储在文件 address.txt 中,可以通过输入awk -f address.awk address.txt来执行这个脚本。此代码将产生以下输出:
代码 1.4: 脚本输出
代码 1.4: 脚本输出
Jimmy the Weasel, 100 Pleasant Drive, San Francisco, CA 12345 Big Tony, 200 Incognito Ave., Suburbia, WA 67890
OFS 和 ORS
在 address.awk 的 print 语句中,可以看到 awk 会连接(合并)一行中彼此相邻的字符串。我们使用此功能在同一行上的三个字段之间插入一个逗 号和空格(, )。这个方法虽然有用,但比较难看。与其在字段间插入,字符串,倒不如让通过设置一个特殊 awk 变量 OFS,让 awk 完成这件事。请参考下面这个代 码片断。
代码 1.5: 示例代码片断
代码 1.5: 示例代码片断
print Hello, there, Jim!
这行代码中的逗号并不是实际文字字符串的一部分。事实上,它们告诉 awk, Hello、there和Jim!是单独的字段,并且应该在每个字符串之间打印 OFS 变量。缺省情况下,awk 产生以下输出:
代码 1.6: awk 产生的输出
代码 1.6: awk 产生的输出
Hello there Jim!
这是缺省情况下的输出结果,OFS 被设置成 ,单个空格。不过,我们可以方便地重新定义 OFS,这样 awk 将插入我们中意的字段分隔符。以下是原始address.awk 程序的修订版,它使用 OFS 来输出那些中间的, 字符串:
代码
代码 1.7: 重新定义 OFS BEGIN {
FS=\n RS= OFS=,
}
{ print $1, $2, $3 }
awk 还有一个特殊变量 ORS,全称是“输出记录分隔符”。通过设置缺省为换行(\n) 的 OFS,我们可以控制在 print 语句结尾自
您可能关注的文档
- 2020教师师德培训总结.docx
- 2021年pep小升初英语模拟测试题.docx
- 02197概率论与数理统计重点复习资料.docx
- 06001惠港酒店发文格式.docx
- 06005 统一打卡通知.docx
- 06092工作分析八套试卷 答案.docx
- 10000汉字起笔部首表.docx
- 11000地形测量技术设计.docx
- 20000字起笔部首检字表.docx
- 20148小继教培训心得体会.docx
- 2026年旅游交通行业服务流程优化报告.docx
- 宣贯培训(2026年)《YDT 3949-2021物联网卡安全管理技术要求》.pptx
- 2026年五金制品行业品牌建设未来趋势及市场拓展规划报告.docx
- 机械制造技术电子教案 机械加工工艺规程的制定.pdf
- 宣贯培训(2026年)《YDT 3950-2021物联网卡安全监测与管理平台协同处置接口规范》.pptx
- 数学统计图表在校园节水数据隐私保护中的实践应用教学研究课题报告.docx
- 2026年茴香加工行业市场拓展及品牌数字化营销报告.docx
- 中医院导医服务流程优化方案.docx
- 2026年流量传感器在智能环保设备应用报告.docx
- 2026年服务业孟加拉语培训机构市场风险评估报告.docx
最近下载
- 浙江省湖州市吴兴区2024-2025学年三年级上册期末考试数学试卷(含答案).docx VIP
- 《跨文化交际》第五章 跨文化的非语言交际 PPT课件.pptx VIP
- 多发性骨髓瘤护理查房(共30张PPT).pptx VIP
- 上海高考英语阅读理解巧上海高考英语阅读理解技巧.doc VIP
- 2026年车间生产工作计划范文.docx
- 2026年车间生产工作计划范文.docx
- 2026年党支部在学习贯彻党的创新理论、加强党性锤炼等“对照五个方面”存在的问题及整改措施4030字范文.docx VIP
- 高二英语试题及答案.doc VIP
- 网络预约出租汽车驾驶员从业资格考试区域科目考题[精品文档].docx VIP
- 阿布扎比2030经济愿景.pdf VIP
原创力文档

文档评论(0)