当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 记录、循环和数组Daniel Robbins总裁兼 CEO, Gentoo Technologies, Inc.2001 年 1 月 在这篇 awk简介的续集中,Daniel Robbins 继续探索awk(一种很棒但有怪异名称的语言)。
 

 

    摘要:2001 年 10 月 sed 是十分强大和小巧的文本流编辑器。在本文章系列的第二篇中,daniel robbins 为您演示如何使用 sed 来执行字符串替换、创建更大的 sed 脚本以及如何使用 sed 的附加、插入和更改行命令。sed 是很有用(但常被遗忘)的 unix 流编辑器。在以批处理方式编辑文件或以有效方式创建 shell 脚本来修改现有文件方面,它是十分理想的工具。本文是 前一篇介......
 ·bochs的初印象(cpu部分)    »显示摘要«
    摘要:you will say it is ugly! 写了自己的arm仿真平台,也用了一段时间bochs,断断续续地接触qemu,似乎一直在虚拟的世界里游走,乐而忘返。 bochs是x86的全仿真平台,用的人不计其数,但好的文档却几乎不存在,毕竟写虚拟机的是少数人。http://wiki.cs.uiuc.edu/cs427/architecture+of+bochs 《architecture of ......


通用线程:Awk 实例,第 2部分
记录.循环与数组

daniel robbins 【程序编程相关:学习嵌入式Linux的笔记和体会

【推荐阅读:系统调用的实现及调用过程

总裁兼 ceo, gentoo technologies, inc. 【扩展信息:iptables 中文手册

2001 年 1 月

在这篇 awk简介的续集中,daniel robbins 继续探索awk(一种很棒但有怪异名称的语言).daniel将演示如何处理多行记录.使用循环结构,以及创建并使用 awk数组.阅读完本文后,您将精通许多 awk的功能,而且可以编写您自己的功能强大的 awk 脚本.

多行记录

awk 是一种用于读取与处理结构化数据(如系统的 /etc/passwd 文件)的极佳工具./etc/passwd 是 unix 用户数据库,并且是用冒号定界的文本文件,它包含许多重要信息,包括所有现有用户帐户与用户标识,以及其它信息.在我的 前一篇文章 中,我演示了 awk 如何轻松地分析这个文件.我们只须将 fs(字段分隔符)变量设置成 ":".

正确设置了 fs 变量之后,就可以将 awk 配置成分析几乎任何类型的结构化数据,只要这些数据是每行一个记录.然而,如果要分析占据多行的记录,仅仅依靠设置 fs 是不够的.在这些情况下,我们还需要修改 rs 记录分隔符变量.rs 变量告诉 awk 当前记录什么时候结束,新记录什么时候开始.

譬如,让我们讨论一下如何完成处理“联邦证人保护计划”所涉及人员的地址列表的任务:

jimmy the weasel 100 pleasant drive san francisco, ca 12345 big tony 200 incognito ave. suburbia, wa 67890

理论上,我们希望 awk 将每 3 行看作是一个独立的记录,而不是三个独立的记录.如果 awk 将地址的第一行看作是第一个字段 (),街道地址看作是第二个字段 (),城市.州与邮政编码看作是第三个字段 ,那么这个代码就会变得很简单.以下就是我们想要得到的代码:

begin { fs="\n" rs="" }

在上面这段代码中,将 fs 设置成 "\n" 告诉 awk 每个字段都占据一行.通过将 rs 设置成 "",还会告诉 awk 每个地址记录都由空白行分隔.一旦 awk 知道是如何格式化输入的,它就可以为我们执行所有分析工作,脚本的其余部分很简单.让我们研究一个完整的脚本,它将分析这个地址列表,并将每个记录打印在一行上,用逗号分隔每个字段.

address.awk

begin { fs="\n" rs="" } { print ", " ", " }

如果这个脚本保存为 address.awk,地址数据存储在文件 address.txt 中,可以通过输入 "awk -f address.awk address.txt" 来执行这个脚本.此代码将产生以下输出:

jimmy the weasel, 100 pleasant drive, san francisco, ca 12345 big tony, 200 incognito ave., suburbia, wa 67890

ofs 与 ors

在 address.awk 的 print 语句中,可以看到 awk 会连接(合并)一行中彼此相邻的字符串.
...   下一页
 ·bash 实例,第 2 部分    »显示摘要«
    摘要:更多的 bash 基本编程daniel robbins总裁兼 ceo, gentoo technologies, inc.2000 年 4 月 在前一篇 bash 的介绍性文章中,daniel robbins 为您讲解了脚本语言的一些基本元素和使用 bash 的原因。在本文(即第二部分)中,daniel 继续前一篇的内容,并讲解条件 (if-then) 语句、循环和更多的 bash 基本结构。我们......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE