1.awk是一个强大的文本分析工具,相对于 grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单 来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
2.awk命令行格式为:awk 'awk程序' 数据文件名, 此时awk会先编译该程序,然后执行该程序来处理所指定的数据文件,因此,对于awk命令来说,重点在awk程序上。
3.awk程序的主要结构:
awk程序中主要语法是Pattern{Actions},故常见之awk程序其形态如下:
Pattern1{Actions1}
Pattern2{Actions2}
4.Pattern是什么:awk可接受许多不同形态的Pattern,一般常使用关系表达式来当成Pattern,关系运算符>, <, >=, <=, ==, !=、~(match), !~(not match)
5.Actions是什么:Actions是由许多awk指令构成,而awk的指令与C语言中的指令十分类似。
I/O指令: print,printf(),getline...
流程控制指令:if(...){...}else{...}, while(...){...}
awk如何处理Pattern{Actions}
awk会先判断该Pattern的值,若为true,则awk执行该pattern对应的Actions,否则不执行
6.例子:
50 > 23{print "hello world"} 此时由于50比23大,所以会输出打印『hello world』
"banana" ~/123/ {print "won't print"} 此时由于banana中不包含123,所以不会打印输出
7.awk字段变量:
$0 一个字符串,其内容为目前awk所读入的数据行
$1 $0上第一个字段的数据
$2 $0上第二个字段的数据
NF 为一整数,表示$0上所存在的字段数目。 Number of Fields
NR 为已整数,表示awk已读入的数据行的数目。 Number of Records
FILENAME 为正在处理的数据文件的文件名
8.awk工作流程:
1)自动从指定的数据文件中读取一个数据行
2)自动更新相关的内建变量之值。如NF、NR、$0....
3)依次执行程序中所有的Pattern{Actions}指令
4)当执行完毕Pattern{Actions}后还有未读取的数据,则反复执行步骤1到步骤4
9.示例:
awk 'BEGIN{FS="[,]";print "begin read file..."}{print $1,$2}END{print "file read done"}' data.csv
BEGIN和END只执行一次,NR是awk已读入的数据行数目,NF文件列总数,FS改变字段切割的方式
awk 'BEGIN{FS="[,]";print "begin read file....";i=0}NR>99990{i+=1;print NR,NF+i,$1,$2}END{print "file read done"}' data.csv
awk 'BEGIN{FS="[,]";print "begin read file ...";i=0}{if(NR>99990||$1>=200006){i+=1;print NR,NF+i,$1,$2}else{print "NR<=99990||$1>=20006"}}END{print 'file read done'}' data.csv
awk 'BEGIN{total=0;i=0;do{total+=i;i++;}while(i<=1000)print total;}'