shell常用命令-awk

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoxiao20121314/article/details/82831956

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;}'

猜你喜欢

转载自blog.csdn.net/xiaoxiao20121314/article/details/82831956