`

awk的学习笔记

阅读更多

转自http://blog.zhangjianfeng.com/article/423

<!-- google_ad_client = "pub-0201128324159379"; google_alternate_color = "FFFFFF"; google_ad_width = 250; google_ad_height = 250; google_ad_format = "250x250_as"; google_ad_type = "image"; google_ad_channel ="8526115967"; google_color_border = ""; google_color_link = ""; google_color_bg = ""; google_color_text = ""; google_color_url = ""; google_ui_features = "rc:10"; //--> google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);

一、awk的语法。

awk是以unix的一个命令的形式提供给用户的,你可以在/bin目录下找到awk这个文
件,如果缺少这个文件,你就不能运行awk。因此,awk拥有自己的调用语法:

awk [ -F re][parameter...]['prog'][-f progfile][in_file...]

参数说明:
re awk记录分隔符。
parameter 该参数帮助为不同的变量赋值。
‘prog’ awk的程序语句。(注意这里必须用单拓号:’和’括起,以防被shell
解释)
progfile awk程序文件。
in_file 输入文件,可以有多个。值得注意的是awk不修改输入文件。如果未
指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。awk支持输入输出重
定向(<、>、>>、<<以及|)。
awk支持模式匹配,若没有给出模式,则对于输入文件中的所有行都有匹配的。

二、简单的应用:
例1:显示文件myfile中含有字符串”sun”的所有行:
awk ‘/sun/ {print}’ myfile
在这里,模式/sun/匹配输入文件myfile中所有含有字符串’sun’的行并对其进行操作,
而程序语句print完成对该行的打印。
你也可以使用,号分开两模式以选定某个范围:
例2:显示文件myfile中第一个匹配Sun或sun的行与第一个匹配Moon或moon行之间
的行:
awk ‘/[Ss]un/,/[Mm]oon/ {print}’ myfile

三、awk的字段:
awk的一个强大的功能是支持对字段的操作,这是grep和sed不能实现的。

所谓的字段,即是行中的一部分。在awk中,一般的情况下,将文本文件中的一行视
为一个记录,而将行中的不同部分称为“字段”。awk用,…的形式顺序的表示行中的
不同部分即不同字段。一般情况下awk将空白符视为字段间的分隔符,在awk中,用一个内
置的FS变量来确定所使用的字段分隔符。awk允许用-F先项改变默认的字段分隔符。同样,
在awk中你也可以通过修改记录分隔符变量RS来改变默认的记录分隔符。
在awk中用内置变量NR来表示当前工作的记录数。我们可以将其应用于模式匹配中用
来指定工作范围:
例3:显示文本文件myfile中第七行到第十五行中以字符%分隔的第一字段,第三字段和
第七字段:
awk -F % ‘NR==7,NR==15 {printf }’ myfile

四、printf语句

awk可以通过调用用一对单引号括起来的一系列语句来完成一些较为复杂的功能。前面
我们已经遇到过的print就是awk的语句之一。awk也支持独立的awk程序的调用,其方法是在
命令行中加上-f <程序文件名>参数。
awk融合了许多C语言的待点,因此,如果你熟悉C语言的话对使用awk将有极大的帮助,
实际上,awk中有许多引用形式都是从C语言借用过来的,如我们下面要看到的printf函数就
是一个例子。
如果你熟悉C语言,你也许会怀念其中的printf函数,它提供的强大格式输出功能曾经
带我们许多的方便。幸运的是,我们在awk中又和它重逢了。awk中printf几乎与C语言中一模
一样,如果你熟悉C语言的话,你完全可以照C语言的模式使用awk中的printf。因此在这里,
我们只给出一个例子,如果你不熟悉的话,请随便找一本C语言的入门书翻翻。
例4:显示文件myfile中的行号和第3字段:
$awk ‘{printf”%03d%s\n”,NR,}’ myfile
值得注意的一点是awk中的内置变量(如这里的NR)不须要以$开头。
对于awk中的其它语句,我们将在后面继续讨论。

五、awk程序设计

前面曾经说过awk提供了整套程序设计语言,包括变量、关系判断、流程控制等等,下面
我们分别说说其中的用法:

(一)、变量:
awk允许在程序语言中设置变量,事实上,提供变量的功能是程序设计语言的其本要求,
不提供变量的程序设计语言本人还从未见过。awk提供两种变量,一种是awk内置的变量,如前面
提到的NR、RS都属于此种范畴,如果你还知道awk提供了哪些其它的内置变量,请参考本文后面
的附录。awk也允许用户在awk程序语句中定义并调用自已的变量。与C语言不同的是,awk中不需
要对变量进行初始化,awk根据其在awk中第一次出现的形式和上下文确定其具体的数据类型。
当变量类型不确定时,awk设定其为字符串类型。
(二)、运算与判断:
awk支持C语言提供的大多数运算:如+、-、*、/、%等等,也支持关系判断,如<、>、>=
等等,也支持用逻辑运算符:!(非)、&&(与)、||(或)和()进行多重判断,这大大增强了awk
的功能。
awk也支持C语言中类似++、–、+=、-=、=+、=-之类的功能,这给熟悉C语言的使用者编写
awk程序带来了极大的方便。
在awk中为了实现某些运算功能,提供了一些内置的函数,如log、sqr、cos、sin等等,同
时,awk也提供了用于对字符串进行操作(运算)的函数如length、substr等等。
awk提供的具体的运算与判断功能请参考文后的附录。
(三)、流程控制
awk提供了完备的类似C语言的流程控制语句,这给我们编程带来了极大的方便。
1、BEGIN和END
在awk中两个特别的表达式,BEGIN和END可用于pattern中,任何在BEGIN之后列出的操作(
在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后报废行。
因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。
例5:累计销售文件xs中的销售金额(假设销售金额在记录的第三字段):

$awk
>’BEGIN { FS=”:”;print “统计销售金额”;total=0}
>{print ;total=total+;}
>END {printf “销售金额总计:%.2f”,total}’ sx
(注:>是shell提供的第二提示符,如要在shell程序awk语句和awk语言中换行,则需在行尾加
反斜杠\)

在这里BEGIN预置了内部变量FS(字段分隔符)和自定义变量total,同时在扫描之前显示出输出
行头。而END则在扫描完成后打印出总合计。

2、流程控制语句
awk提供了完备的流程控制语句,其用法与C语言类似。下面我们一一加以说明:

if…else语句:

格式:
if(表达式)
语句1
else
语句2

格式中”语句1″可以是多个语句,如果你为了方便awk判断也方便你自已阅读,你最好将多个语句
用{}括起来。
awk分枝结构允许嵌套,其格式为
if(表达式1)
{if(表达式2)
语句1
else
语句2
}
语句3
else {if(表达式3)
语句4
else
语句5
}
语句6
当然实际操作过程中你可能不会用到如此复杂的分枝结构,这里只是为了给出其样式罢了。

while语句

格式为
while(表达式)
语句

for语句

格式为:

for(初始表达式;终止条件;步长表达式)
语句

在awk while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的
语句来退出。

好了,awk就介绍到这里,说实在话,就这些内容都是awk的初步知识,电脑永远是前进的科学,
要想跟上它的步伐就得不断前行,但愿本篇能在你前行的漫漫长途中铺平一段小小的路程,能如此,则
愿已偿。
如对本篇有任何疑问,请E-mail To:Chizlong@yeah.net或到主页http://chizling.yeah.net中留言。

附录:

awk内置变量

变量名 含义

ARGC 命令行参数个数
ARGV 命令行参数数组
FILENAME string=当前输入的文件名
FNR 在当前文件中当前记录数(对输入文件起始为1)
FS 输入字段分隔符
NF 当前记录的字段数
NR 当前记录数(为全部输入文件)
OFMT 数值的输出格式(默认为%.6g)
OFS 输出字段的分隔符(默认为空格)
ORS 输出记录分隔符(默认为换行符)
RS 输入记录分隔符(默认为换行符)

awk允许的测试:

操作符 含义

x==y x等于y?
x!=y x不等于y?
x>y x大于y?
x>=y x大于或等于y?
x<y x小于y?
x<=y x小于或等于y?
x~re x匹配正则表达式re?
x!~re x不匹配正则表达式re?

awk的操作符(按优先级升序排列)

= 、+=、 -=、 *= 、/= 、 %=
||
&&
> >= < <= == != ~ !~
xy (字符串连结,’x”y’变成”xy”)
+ -
* / %
++ –

awk的函数

int(x) 对x取整
rand 取 0到1之间的随机数
srand(x) 设置x为rand的新输入值
cos(x) 给出x的余弦值
sin(x) 给出x的正弦值
atan2(x,y) 给出y/x的正切值
exp(x) 给出e的x次幂
log(x) 给出x的常用对数值(基为e)
sqrt(x) 给出x的正平方根值
exit(x) 结束awk程序,若有x值,则返回x,否则返回0.
index(s,t) 返回t在s中的第一个开始位置,如t不是s的子串,则返回0]
length(x) 求x的长度(字符个数)
substr(s,x,y) 在字符串s中取得从x个字符开始的长度为y的子字符串.

分享到:
评论

相关推荐

    awk 学习笔记加例子

    **awk学习笔记与实例解析** awk 是一种强大的文本分析工具,尤其在Linux和Unix系统中广泛使用。它允许用户通过模式匹配和处理规则对输入数据进行操作,特别适合于处理结构化的文本文件,如日志文件、配置文件等。本...

    PDF电子书《Awk学习笔记2010修改版》

    ### PDF电子书《Awk学习笔记2010修改版》相关知识点 #### AWK简介 AWK是一种强大的脚本语言,由Alfred V. Aho、Peter J. Weinberger和Brian W. Kernighan在1977年设计并实现。这三位计算机科学家的名字首字母合成了...

    awk学习笔记

    awk学习笔记主要涵盖了awk编程语言的基础知识和常用功能。awk是一种强大的文本分析工具,尤其在Linux/Unix环境下广泛使用。它能够处理标准输入、文件或其它命令的输出,通过模式匹配对文本进行分析和处理。 1. **...

    awk学习笔记(简单易学)

    ### awk学习笔记精要 #### 1. awk简介 awk是一种功能强大的文本处理语言,主要用于在Linux/Unix环境中处理文本和数据。它能够从标准输入、文件或其它命令的输出中提取并处理数据,支持自定义函数和动态正则表达式...

    linux awk学习笔记

    `awk`的学习需要结合实际案例进行,通过编写和运行脚本来熟悉其用法和功能。 总结,`awk`是Linux文本处理的重要工具,其灵活性和强大的功能使其在数据分析、日志分析等领域有着广泛的应用。通过深入学习和实践,...

    awk 学习笔记

    ### awk 学习笔记 #### 1. awk简介 awk是一种功能强大的文本处理语言,主要用于Linux和Unix环境下的数据处理。它可以处理来自标准输入、文件或命令输出的数据,支持自定义函数和动态正则表达式等功能,使其成为...

    awk学习笔记,从论坛整理而来

    `awk` 是一种强大的文本分析工具,常用于处理和解析结构化的文本文件,如日志文件、配置文件等。在Linux和Unix系统中,`awk` ...通过不断地实践和学习,你将能够有效地利用 `awk` 解决日常工作中遇到的文本处理问题。

    linux下AWK学习笔记

    本笔记将详细介绍AWK的基本概念、语法、命令选项以及常用的特性。 ### 1. AWK简介 AWK是由三位开发者的首字母命名的——Alfred V. Aho、Peter J. Weinberger和Brian W. Kernighan。它是一种内置了多种功能的语言,...

    AWK学习笔记.doc

    本笔记主要涵盖了AWK的基础知识和高级特性,旨在帮助读者理解和掌握这一实用工具。 **一.1 什么是AWK?** AWK是由Aho、Weinberger和Kernighan三位计算机科学家开发的,它的名字就是由他们的姓氏首字母组成的。AWK是...

    awk学习笔记(学习awk编程的好帮手)

    awk是一种强大的文本分析工具,广泛应用于Linux和Unix系统中。...学习awk能够极大地提升在Linux和Unix环境下处理文本数据的能力。通过深入理解和实践,你可以利用awk解决各种数据处理挑战,提高工作效率。

    awk学习笔记.pdf

    AWK是一种编程语言,用于在Linux环境下对文本和数据进行处理和分析。它是许多UNIX系统中的标准工具,并且是文本处理的强大工具。AWK通过模式匹配来处理文本文件,其中可以指定一系列规则,称为模式和动作,来对输入...

    Awk学习笔记和指南

    awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和 动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。...

    sed与awk(第二版)学习笔记

    sed与awk(第二版)学习笔记

    Awk学习笔记

    1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项 3. 模式和操作 3.1. 模式 3.2. 操作 4. awk的环境变量 5. awk运算符 6. 记录和域 6.1. 记录 6.2. 域 6.3. 域分隔符 7. gawk专用...

    sed awk学习

    sed awk 学习笔记 SED 是一个“非交互式”的面向字符流的编辑器,它可以在一个地方指定所有的编辑指令,然后通过文件传递一次来执行他们。但是它在每次多于一行的处理能力方面有限制。SED 的优点是可以批量处理文件...

    awk学习的相关内容

    文件名`awk学习-20101008.doc`可能包含了作者在2010年10月8日整理的awk学习笔记,涵盖了基本语法、常用命令和实战案例。可能包括以下内容: 1. **基本语法**:介绍awk的基本结构,如模式-动作对,以及如何指定输入...

Global site tag (gtag.js) - Google Analytics