awk学习笔录(一)

来源:互联网 发布:淘宝店铺水印制作 编辑:程序博客网 时间:2024/05/29 19:52

awk是一门脚本处理语言,对于处理格式化的文本而言非常方便。下面结合自己实际过程中的使用体会做一些总结。

执行原理

awk脚本由3部分组成,BEGIN{}、/模式/{}和END{}。BEGIN{}用来进行一些预设置,比如初始化变量,END{}用来做一些善后处理,所以两者对于一个文本文件来说只执行一次,而中间的/模式/{}部分以行为单位,文本文件的每一行都会执行一次。
通常,根据使用目的,如果脚本执行没有输入文件,只需要有BEGIN{}或(和)END{}即可;如果不需要预处理或(和)善后处理,则只需要/模式/{}部分即可。
需要额外注意的是,当脚本连续处理多个文本文件时,BEGIN{}和END{}对每个输入文本文件都会执行一次。

执行方法

awk脚本既可以写到文件中,也可以直接在终端书写并执行。对于较短的脚本,可以选择在终端输入执行。为了便于反复执行的便利和效率,一般将脚本内容写入文件。
对于终端输入执行,其书写格式为:awk ‘脚本内容’ 文本文件名(可以多个文本文件,空格分隔)
对于执行脚本文件,其书写格式为:awk -f 脚本文件名 文本文件名(可以多个文本文件,空格分隔)

分隔符的设置

默认分隔符是占位符,包括空格和tab。如果需要更改默认分隔符,以逗号为例,格式如下:
awk -F “,”file (逗号用单、双引号括起都是可以的)
awk ‘BEGIN{FS=”,”}’ file(逗号只能用双引号括起)
如果想设置一个以上分隔符,格式类似如下:
awk -F “[,:]” file
awk ‘BEGIN{FS=”[,:]”}’ file

学习技巧

通常awk的语法格式和c语言是非常类似的,因此,对于不熟悉的语法完全可以往c语言上靠。不过,一些差异还是有的。

书写格式

awk语句末尾可以没有分号,直接换行。如果多个语句在同一行,需要加分号。

环境变量

环境变量是内置变量,直接使用。常用的一些变量如下:
FS 字段分隔符
OFS 输出字段分隔符
RS 记录分隔符(默认是一个回车)
ORS 输出记录分隔符(默认是一个回车)
NF 当前记录中的字段数
NR 当前记录数。从1开始。
FILANAME 当前输入文本文件名
SUBSEP 数组下标分隔符(默认是’\034’)
IGNORECASE 设为1表示忽略大小写

变量

awk没有类型的概念,也不需要定义,直接使用。但最好的方法是,一个变量只存一种类型,以免混乱。
数值型变量不需要初始化,默认会从0开始加。

条件语句

if else, while, for用法同C语言
break, continue用法同C语言
next 从输入文件中读取一行,然后从头开始执行awk脚本
exit 结束awk程序,但不会略过END块。退出状态为0代表成功,非零值表示出错。

数组

awk的数组为关联数组。只有一维数组,不支持二维数组,但可以模拟二维数组。

函数

自定义函数的格式如下:

function name(parameter1,parameter2, ...){    statement}

awk里的函数没有返回类型,形参也没有类型。函数可以定义在BEGIN{}前,也可以定义在END{}后。

0 0