没有合适的资源?快使用搜索试试~ 我知道了~
linux 文本扫描与处理--awk 使用手册
需积分: 10 18 下载量 81 浏览量
2011-05-06
16:55:37
上传
评论 1
收藏 58KB DOC 举报
温馨提示
试读
18页
什么是awk? 你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度。awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是具有独立意义的英文单词,也不是几个相关单词的缩写。事实上,awk是三个人名的缩写,他们是:Aho、(Peter)Weinberg和(Brain)Kernighan。正是这三个人创造了awk---一个优秀的样式扫描与处理工具。 AWK的功能是什么?与sed和grep很相似,awk是一种样式扫描与处理工具。但其功能却大大强于sed和grep。awk提供了极其强大的功能:它几乎可以完成grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上,awk的确拥有自己的语言:awk程序设计语言,awk的三位创建者已将它正式定义为:样式扫描和处理语言。
资源推荐
资源详情
资源评论
awk 使用手册
来源不详
什么是
你可能对 比较熟悉,但你可能对 很陌生,这一点也不
奇怪,的确,与其优秀的功能相比, 还远没达到它应有的知
名度。 是什么?与其它大多数 命令不同的是,从名字
上看,我们不可能知道 的功能:它既不是具有独立意义的英
文单词,也不是几个相关单词的缩写。事实上, 是三个人名
的缩写,他们是:、 和
!。正是这三个人创造了 一个优秀的样
式扫描与处理工具。
! 的功能是什么?与 "# 和 $ 很相似, 是一种样式扫
描与处理工具。但其功能却大大强于 "# 和 $。 提供了
极其强大的功能:它几乎可以完成 $ 和 "# 所能完成的全部
工作,同时,它还可以可以进行样式装入、流控制、数学运算
符、进程控制语句甚至于内置的变量和函数。它具备了一个完整
的语言所应具有的几乎所有精美特性。实际上, 的确拥有自
己的语言: 程序设计语言, 的三位创建者已将它正式定
义为:样式扫描和处理语言。
为什么使用
即使如此,你也许仍然会问,我为什么要使用
使用 的第一个理由是基于文本的样式扫描和处理是我们经常
做的工作, 所做的工作有些象数据库,但与数据库不同的
是,它处理的是文本文件,这些文件没有专门的存储格式,普通
的人们就能编辑、阅读、理解和处理它们。而数据库文件往往具
有特殊的存储格式,这使得它们必须用数据库处理程序来处理它
们。既然这种类似于数据库的处理工作我们经常会遇到,我们就
应当找到处理它们的简便易行的方法, 有很多这方面的工
具,例如 "#、$、" 以及 %# 等等, 是其中十分优
秀的一种。
使用 的第二个理由是 是一个简单的工具,当然这是相
对于其强大的功能来说的。的确, 有许多优秀的工具,例
如 天然的开发工具 & 语言及其延续 &''就非常的优秀。但
相对于它们来说, 完成同样的功能要方便和简捷得多。这首
先是因为 提供了适应多种需要的解决方案:从解决简单问题
的 命令行到复杂而精巧的 程序设计语言,这样做的好
处是,你可以不必用复杂的方法去解决本来很简单的问题。例
如,你可以用一个命令行解决简单的问题,而 & 不行,即使一个
再简单的程序,& 语言也必须经过编写、编译的全过程。其
次, 本身是解释执行的,这就使得 程序不必经过编译的
过程,同时,这也使得它与 "((")$ 程序能够很好的契合。
最后, 本身较 & 语言简单,虽然 吸收了 & 语言很多优
秀的成分,熟悉 & 语言会对学习 有很大的帮助,但 本
身不须要会使用 & 语言——一种功能强大但需要大量时间学习才
能掌握其技巧的开发工具。
使用 的第三个理由是 是一个容易获得的工具。与 & 和
&''语言不同, 只有一个文件**,而且几乎每个版
本的 都提供各自版本的 ,你完全不必费心去想如何获
得 。但 & 语言却不是这样,虽然 & 语言是 天然的开发
工具,但这个开发工具却是单独发行的,换言之,你必须为你的
版本的 & 语言开发工具单独付费(当然使用 + 版者除
外),获得并安装它,然后你才可以使用它。
基于以上理由,再加上 强大的功能,我们有理由说,如果你
要处理与文本样式扫描相关的工作, 应该是你的第一选择。
在这里有一个可遵循的一般原则:如果你用普通的 "(( 工具或
"((")$ 有困难的话,试试 ,如果 仍不能解决问题,
则便用 & 语言,如果 & 语言仍然失败,则移至 &''。
的调用方式
前面曾经说过, 提供了适应多种需要的不同解决方案,它们
是:
一、 命令行,你可以象使用普通 命令一样使用 ,
在命令行中你也可以使用 程序设计语言,虽然 支持多
行的录入,但是录入长长的命令行并保证其正确无误却是一件令
人头疼的事,因此,这种方法一般只用于解决简单的问题。当
然,你也可以在 "((")$ 程序中引用 命令行甚至
程序脚本。
二、使用- 选项调用 程序。 允许将一段 程序写入
一个文本文件,然后在 命令行中用- 选项调用并执行这段程
序。具体的方法我们将在后面的 语法中讲到。
三、利用命令解释器调用 程序:利用 支持的命令解释
器功能,我们可以将一段 程序写入文本文件,然后在它的第
一行加上
./**-
并赋予这个文本文件以执行的权限。这样做之后,你就可以在命
令行中用类似于下面这样的方式调用并执行这段 程序了。
0 脚本文本名 待处理文件
的语法:
与其它 命令一样, 拥有自己的语法:
1231$4555316$631-$%(317%(5553
参数说明:
2允许 更改其字段分隔符。
$4该参数帮助为不同的变量赋值。
6$6 的程序语句段。这个语句段必须用单拓号:6和6括
起,以防被 "(( 解释。这个程序语句段的标准形式为:
6$8)96
其中 $ 参数可以是 $ 正则表达式中的任何一个,它可
以使用语法**再加上一些样式匹配技巧构成。与 "# 类似,你
也可以使用:,:分开两样式以选择某个范围。关于匹配的细节,你
可以参考附录,如果仍不懂的话,找本 书学学 $ 和
"#(本人是在学习 # 时掌握匹配技术的)。) 参数总是
被大括号包围,它由一系统 语句组成,各语句之间用:;:分
隔。 解释它们,并在 $ 给定的样式匹配的记录上执行
其操作。与 "(( 类似,你也可以使用“.<作为注释符,它使“.<
到行尾的内容成为注释,在解释执行时,它们将被忽略。你可以
省略 $ 和 ) 之一,但不能两者同时省略,当省略
$ 时没有样式匹配,表示对所有行(记录)均执行操作,
省略 ) 时执行缺省的操作——在标准输出上显示。
-$%(允许 调用并执行 $%( 指定有程序文
件。$%( 是一个文本文件,他必须符合 的语法。
7%( 的输入文件, 允许对多个输入文件进行处理。
值得注意的是 不修改输入文件。如果未指定输入文件,
将接受标准输入,并将结果显示在标准输出上。 支持输入输
出重定向。
的记录、字段与内置变量:
前面说过, 处理的工作与数据库的处理方式有相同之处,其
相同处之一就是 支持对记录和字段的处理,其中对字段的处
理是 $ 和 "# 不能实现的,这也是 优于二者的原因之
一。在 中,缺省的情况下总是将文本文件中的一行视为一个
记录,而将一行中的某一部分作为记录中的一个字段。为了操作
这些不同的字段, 借用 "(( 的方法,用0,0,0=555这样的
方式来顺序地表示行(记录)中的不同字段。特殊地, 用0
表示整个行(记录)。不同的字段之间是用称作分隔符的字符分
隔开的。系统默认的分隔符是空格。 允许在命令行中用2
的形式来改变这个分隔符。事实上, 用一个内置的变量 2>
来记忆这个分隔符。 中有好几个这样的内置变量,例如,记
录分隔符变量 ?>、当前工作的记录数 ? 等等,本文后面的附表
列出了全部的内置变量。这些内置的变量可以在 程序中引用
或修改,例如,你可以利用 ? 变量在模式匹配中指定工作范
围,也可以通过修改记录分隔符 ?> 让一个特殊字符而不是换行
符作为记录的分隔符。
例显示文本文件 4@%( 中第七行到第十五行中以字符A分隔的
第一字段,第三字段和第七字段:
2A6?BB,?BB8$-00=096
的内置函数
之所以成为一种优秀的程序设计语言的原因之一是它吸收了
某些优秀的程序设计语言(例如 &)语言的许多优点。这些优点
之一就是内置函数的使用, 定义并支持了一系列的内置函
数,由于这些函数的使用,使得 提供的功能更为完善和强
大,例如, 使用了一系列的字符串处理内置函数这些函数看
起来与 & 语言的字符串处理函数相似,其使用方式与 & 语言中的
函数也相差无几,正是由于这些内置函数的使用,使 处理
字符串的功能更加强大。本文后面的附录中列有一般的 所提
供的内置函数,这些内置函数也许与你的 版本有些出入,因
此,在使用之前,最好参考一下你的系统中的联机帮助。
剩余17页未读,继续阅读
资源评论
laoshiren111
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功