十一、条件语句
格式:
{if(表达式) {语句1;语句2;...}}
{if(表达式){语句1; 语句2...} else {语句1; 语句2;...}}
{if(表达式1){语句1; 语句2...} else if (表达式2){语句1; 语句2;..} else if (表达式2){语句1; 语句2;..} else if (表达式2){语句1; 语句2;..} ... else{语句1; 语句2... }}
注意:if语句是操作必须用花括号括起来。
十二、循环
1.while循环
{while(表达式) {语句1;语句2;...}}
{do{语句1;语句2;...}while(表达式)}
例:
awk '{i = 1; while(i <= NF) {print NF, $i; i++}}' test_awk.txt
注意:i的起始值应从1开始,因为i=0时,$i = $0代表一整行。
2.for循环
例:
awk '{for(i = 1; i < NF; i++) {print $i}}' test_awk.txt
3.循环控制
continue跳出内循环,break跳出外循环
十三、程序控制语句
1.next语句
next语句从输入文件中取出下一行输入,然后从awk的顶部继续执行。
例:
awk '{if($1 ~ /ABC/){next} else{print}}' test_awk.txt #abc def hic lmn abc #123 456 1.23 4.5 321 #You are a good boy #That's a very lovely dog
八、变量
1.数值变量和字符串变量
数值数字可以是整数、浮点数和科学计数法表示的数(如:.723E-1, 3.4e7),字符串则扩在双引号中。
初始化:只要在awk程序中被提到,变量就开始存在,变量可以是一个字符串或一个数字,也可以即是字符串又是数字。变量被设置后就会变成与等号右边那个表达式相同的类型。未经初始化的变量时0或“”
强制类型转换:如果把一个字符串强制转换成数字,方法为:变量名+0;如果要把一个数字转化为字符串方法为:变量名 ""(变量名后跟一个空格和一个空字符串);
2.用户自定义变量
变量名可以是字母,数字和下划线,但不能以数字开头。不用声明变量类型,awk会自动判断。如果变量为初始化,awk会将字符串初变量始化为空字符串,数值变量初始化0;
3.字段变量
新的字段可以通过赋值来创建,字段变量引用的字段如果没有值责备赋值为空串,字段的值发生变化时,awk会以OFS
的值作为字段分隔符重新计算$0变量的值,字段数目最多限制在100以内。
例:awk '{$5 = $3 * 1000 / 2 ; print}" filename
说明:如果不存在第五个字段($5),awk会创建它并将$3 * 1000 / 2的值赋给它,如果存在第五个字段,awk直接将表达式的值赋给它,替换掉原来的内容。
七、比较表达式
1.关系运算符
运算符 |
描述 |
---|---|
赋值运算符 |
|
= += -= *= /= %= ^= **= |
赋值语句 |
逻辑运算符 |
|
|| |
逻辑或 |
&& |
逻辑与 |
正则运算符 |
|
~ ~! |
匹配正则表达式和不匹配正则表达式 |
关系运算符 |
|
< <= > >= != == |
关系运算符 |
算术运算符 |
|
+ - |
加,减 |
* / & |
乘,除与求余 |
+ - ! |
一元加,减和逻辑非 |
^ *** |
求幂 |
++ -- |
增加或减少,作为前缀或后缀 |
其它运算符 |
|
$ |
字段引用 |
空格 |
字符串连接符 |
?: |
C条件表达式 |
in |
数组中是否存在某键值 |
五.文件中的awk命令
如果awk命令别写到文件里,就要用-f选项指定awk的文件名。后面再加所要处理的输入文件的文件名。awk从缓冲区读入一条记录,接着测试awk文件中的每一条命令,如后对读入的记录执行命令。处理完一条记录后,awk将其丢弃,接着将下一条记录读入缓冲区,依次处理所有记录。
cat test_awk.txt
abc def hic lmn abc
123 456 1.23 4.5 321
ABC Def hIc lmN ABC
ABC Def cih lmN dsf
You are a good boy
That's a very lovely dog
cat shell.awk
/^ABC/{print "hello world "}
{print $1, $3}
例:
awk -f shell.awk test_awk.txt #abc hic #123 1.23 #hello world #ABC cih #hello world #ABC hIc #You a #That's very
说明:awk将第一条记录读入缓冲区,用shell.awk中的命令去处理,首先检查这条记录是不是以ABC开头,如果不是则继续对该条记录执行第二条命令,即打印第一和第三个字段。如果是以ABC开头的,则打印'hello world'和一个换行,然后再执行第二条命令打印第一和第三个字段。执行完第一条记录后,将其丢弃,然后读入第二条记录,执行上述操作。直到所有记录都处理完毕。
一.什么是awk,nawk,gawk?
awk是一种用于处理数据和生成报表的UNIX编程语言。nawk是awk的新版本。gawk是基于linux的GNU版本。
二.awk的格式
awk程序是由awk命令,括在括号(或写在文件)中的程序指令以及输入文件的文件名几个部分组成。如果没有指定输入文件,输入则来自标准输入。
awk指令由模式、操作或模式与操作的组合组成。
awk以逐行方式扫描文件(或输入),从第一行到最后一行,以查找匹配某个特定模式的文本行,并对这些文本行执行(括在括号中的)指定动作。如果只给出模式而未指定动作,则所有匹配模式的行都显示在屏幕上。如果只指定动作而未定义模式,会对所有输入行执行自动动作。
1.从文件输入
格式:
awk 'pattern' filename
awk '{action}' filename
awk 'pattern {action}' filename
下面的例子分别演示了这三种格式
cat test_awk.txt
abc def hic lmn abc
123 456 1.23 4.5 321
ABC Def hIc lmN ABC
ABC Def hIc lmN dsf