用UNIX awk来巧妙处理文本文件

ZDNet软件频道 时间:2002-10-24 作者:BUILDER.COM |  我要评论(11)
本文关键词:
你可以用UNIX awk来完成难以计数的任务,但是它最擅长于处理格式化的数据文件,如平面文件(flat file,由不包括重复组的一组同类型记录构成的文件)数据库和电子表格。这里我们介绍一下如何用awk来处理这类任务。
你可以用UNIX awk来完成难以计数的任务,但是它最擅长于处理格式化的数据文件,如平面文件(flat file,由不包括重复组的一组同类型记录构成的文件)数据库和电子表格。这里我们介绍一下如何用awk来处理这类任务。


基本知识
文章“揭开sed和awk的秘密”有sed和awk这两种UNIX工具的功能和用法的概述。


从命令行开始

awk的命令行方式的几本结构是:
awk [program|-f programfile] [flags/variables] [files]

第一个参数可以是单个awk命令、多个用分号隔开的awk命令或者包含一系列awk命令的文件。如果指定的是一个命令文件,就需要使用“-f”标志。

第二个命令行参数是标志或变量申明。如果你使用–F re,那么正则表达式(regular expression)re就用作字段间隔器,而不是默认的空格(white space)。你可以通过在命令行中使用“variable =VALUE”来初始化变量。

Awk的命令行结构

Awk的命令行有一个简单的结构,包括:

  • 选择器(模式匹配器),典型的是用以选择要处理或者/并且要在被选中数据上进行操作的动作,两者至少要用上一个。
  • 括号,{},用于指定任务。

如果只给定选择器,默认操作就是打印文件。如果只给定一个任务,那么该任务执行于文件中的每一行。当选择器和任务都被指定指定,那么就在选择器选定的行中执行该任务。一个任务可能有多个由分号隔开的语句。

可以用零个、一个或两个选择标准(模式匹配条件)来选择某一行。如果使用多标准,用逗号来分隔它们。选择器可以是正则表达式或者布尔表达式(逻辑表达式,即结果只是“真”或“假”的表达式)。我们早先已经提到,如果没有指定选择器,任务执行的范围将是输入文件的所有行。如果给定一个条件,任务将在满足该条件的行上执行。如果指定两个条件,任务将从满足第一个条件的行开始执行直到满足第二个条件的行结束,即执行范围为这两行之间。输入数据集的每一行都会被检测是否符合选择器,除非用next语句在检测之前执行了动作。

执行任务以BEGIN块为起始。BEGIN是awk的保留字,并对大小写敏感。然后,分配命令行变量的值。接着就是读入输入数据集并分配内建变量的值。每一个命令都有自己的选择器;当值为“真”时,执行该命令。最后运行END块。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134