一、awk基本用法

下图展示的awk编程模型是理解awk的基础:

awk 学习_数组


 

二、awk基本用法

调用awk有三种方法(与sed类似):

Shell命令行输入命令调用awk,格式为:

awk [-F 域分隔符] ‘awk程序段’ 输入文件

awk程序段插入脚本文件后,然后通过awk命令调用它:

awk -f awk脚本文件 输入文件

awk命令插入脚本文件后,最常用的方法是设置该脚本文件为可执行,然后直接执行该脚本文件,格式为:

./awk脚本文件输入文件

第二种方法脚本文件的首行不以#!/bin/awk –f开头;第三种方法脚本文件的首行是#!/bin/awk –f

推荐使用第一种方法和第三种方法

三、awk记录和域

awk认为输入文件是结构化的,awk将每个输入文件行定义为记录,行中的每个字符串定义为域,域之间用空格、Tab键或其他符号进行分割,分割域的符号就叫分隔符

 

awk 学习_休闲_02


 

与其他编程语言一样,awk表达式用于存储、操作和获取数据,一个awk表达式可由数值、字符常量、变量、操作符、函数和正则表达式自由组合而成

变量是一个值的标识符,定义awk变量非常方便,只需定义一个变量名并将值赋给它即可。变量名只能包含字母、数字和下划线,而且不能以数字开头

 

awk 学习_休闲_03

四、awk系统变量:

awk定义了很多内建变量用于设置环境信息,我们称它们为系统变量,这些系统变量可分为两种:

1种用于改变awk的缺省值,如域分隔符;

2种用于定义系统值,在处理文本时可以读取这些系统值,如记录中的域数量、当前记录数、当前文件名等,awk动态改变第2种系统变量的值

 

awk 学习_休闲_04

五、awk格式化输出

awk的一大主要功能是产生报表,报表就要求按照预定的格式输出,awk借鉴C语言的语法,定义了printf输出语句,它可以规定输出的格式。printf的基本语法如下:

printf (格式控制符,参数)

格式控制符分为awk修饰符和格式符

 

awk 学习_数组_05

六、awk内置字符串函数

awk内置字符串函数极为强大,是Shell处理字符串的常用工具

awk 学习_数组_06

七、awk数组

数组是用于存储一系列值的变量,这些值之间通常是有联系的,可通过索引来访问数组的值,索引需要用中括号括起,数组的基本格式为:

array[index]=value

关联数组是指数组的索引可以是字符串,也可以是数字

关联数组在索引和数组元素值之间建立起关联,对每一个数组元素,awk自动维护了一对值:索引和数组元素值

关联数组的值无需以连续的地址进行存储,awk的所有数组都是关联数组

字符串和数字之间的差别是明显的,如,我们使用array[09]指定一个数组值

split(r,s,t)函数将字符串以t为分隔符,将r字符串拆分为字符串数组,并存放在s中,此时s通常就是一个数组

awk 'BEGIN {print split("abc/def/xyz",str,"/")}'

上面命令以“/”为分隔符,将字符串abc/def/xyz分开,并存在str数组中,split函数的返回值是数组的大小

awk可使用for循环打印数组内容

for (variable in array)

do something with array[variable]

ARGCARGV数组中元素的个数,与C语言一样,从ARGV[0]开始,到 ARGV[ARGC-1]结束


 

ENVIRON变量存储了Linux操作系统的环境变量