awk 是继 grep系 和 sed系 的第三个文本处理器
gawk - pattern scanning and processing language
格式:
gawk [ options ] 'program' file ...
program:/PATTERN/{ACTION statement; ...}
PATTERN部分:决定动作语句何时触发以及通过什么事件来触发;
BEGIN,END
ACTION statement:对数据进行特定的处理,通常放置在{}中,并使用单引号进行引用;
print,printf
对awk来说,是需要有分隔符这个概念的,因为awk是根据分隔符来区分所需要操作的字段的;
输入分隔符:
awk对数据进行处理时,会根据特定的标识符号对数据进行分段处理,这种标识就称为“输入分隔符”,默认输入分隔符为空格;
输出分隔符:
awk在对数据处理完毕之后,会以特定的标识符号对各个字段进行连续后输出。这种标识就称为“输出分隔符”,默认输出分隔符是空白字符;
记录:
由换行符进行分隔的数据中的一行,称为一条记录;通常用$0来保存整个记录的内容;
字段:
经过分隔符分隔之后的每一个数据分段,都称为一个字段(field);通常在使用awk处理数据时,使用$1, $2, ..$NF等内置变量来存储各个字段的数据;
awk的最全的工作模式: BEGIN{ACTION statement}{ACTION statement}END{ACTION statement}
首先执行BEGIN语句块,其次是主语句块,最后是END语句块;特别提示:BEGIN语句块执行的时候,不会处理数据内容,是在处理数据之前执行的语句,一般用于表头的书写;相反的END语句块,是执行玩数据处理之后,才会执行的语句,一般用于输出总数;BEGIN和END语句块都有可以省略不写,但是中间的语句块必须要写,不能省略;
常用选项:
-f program-file:从指定的文件中加载program语句块,而不是通过命令行给出相关的程序内容;
-F fs:指定出入字段的输入分隔符;默认是空白字符;
-v var=val:用于声明自定义变量并为变量赋值;
awk的常用用法:
1.变量:
内建变量:
FS:input field separator,输入字段分隔符,默认为空白字符;
OFS:output field separator,输出字段分隔符,默认为空白字符;
NF:number of fields,每一行中字段的总数;
FNR: The input record number in the current input file,对于不同的文件分别统计其行的数量,也可以显示每个文件中每行的行号;
ARGC:The number of command line arguments,自定义变量命令行中参数的数量,包括awk命令本身,但不包括awk命令的选项部分和program部分;
自定义变量:
-v var_name=value(变量名大小写敏感)
4.操作符:
算术运算操作符:
双目运算符:
x+y,x-y,x*y,x/y,x^y, x%y
单目运算符:
-x: 将正整数转换为负整数;
+x:将字符串转换为数值;
字符串操作符:
无任何操作符号时,即为字符串连接操作;
赋值操作符:
=,+=,-=,*=,/=,^=,%=
++, --
比较操作符
==,!=,<, <=, >, >=
逻辑运算操作符:
&& || !
5.PATTERN部分:
1) empty:空模式,不加区分地处理文件的每一行;
2) [!]/REGEXP/:仅处理[不]能被PATTERN匹配到的行;
5) BEGIN/END模式:
BEGIN{}
仅在开始处理文件中的第一行文本数据之前执行一次的语句块;多用于输出特定格式的表头信息;
END{}
仅在文本处理完成但awk命令尚未退出时执行一次的语句块;多用于数据信息的汇总;
注意:
1) BEGIN语句块,PATTERN语句块和END语句块的顺序,通常来讲是:
BEGIN{}PATTERN{}END{}
2) BEGIN语句块和END语句块是可选的,但PATTERN语句块必须要给出;
分析磁盘上各个文件系统的空间利用率:
3) do ... while语句:
语法:
do statement while (condition)
意义:与while循环相同,但statement语句段至少被执行一次;
4) for循环:
语法:
for (expr1; expr2; expr3) statement
expr1:variable assignment,变量赋初值;
expr2:circle condition,循环条件判断;
expr3:interation process,变量值修正方法;
for (var in array) statement
7) next语句:
在awk处理数据时,提前结束对当前行的处理,而直接开始处理下一行;
9.函数:
内建函数:
数值函数:Numeric Functions
rand():返回一个介于0到1之间的随机数;
sqrt():对于指定的数值进行开二次方;
字符串函数:String Functions
length():计算给定字符串的长度;
gsub(r, s [, t]):以r表示的模式来查找t表示的字符串中能够被匹配的内容,并将所有出现的内容替换成s表示的内容;
split(s, a [, r [, seps] ]):以seps作为分隔符,利用r表示的模式进行匹配,将s代表的字符串分割之后,保存在a表示的数组中;
自定义函数:
function name(parameter list) { statements }