awk 运算符小结
同其他编程语言一样,awk也有算术运算符,赋值运算符,关系运算符,逻辑预算法,正则运算符。本篇就结合一些示例进行小结。
一、运算符介绍
运算符 | 描述 |
---|---|
赋值运算符 | |
= += -= *= /= %= ^= **= | 赋值语句 |
逻辑运算符 | |
|| | 逻辑或 |
&& | 逻辑与 |
正则运算符 | |
~ ~! | 匹配正则表达式和不匹配正则表达式 |
关系运算符 | |
< <= > >= != == | 关系运算符 |
算术运算符 | |
+ - | 加,减 |
* / & | 乘,除与求余 |
+ - ! | 一元加,减和逻辑非 |
^ *** | 求幂 |
++ -- | 增加或减少,作为前缀或后缀 |
其它运算符 | |
$ | 字段引用 |
空格 | 字符串连接符 |
?: | C条件表达式(三元表达式) |
in | 数组中是否存在某键值 |
二、示例
1、awk赋值运算符
a+=5; 等价于:a=a+5; 其它同类。
2、awk逻辑运算符
1[root@361way ~]# awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}'
20 1
3、awk正则运算符
1[root@361way ~]# awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'
2ok
4、awk关系运算符
如:> < 可以作为字符串比较,也可以用作数值比较,操作数如果是字符串 就会转换为字符串比较。两个都为数字 才转为数值比较。字符串比较:按照ascii码顺序比较。
1[root@361way ~]# awk 'BEGIN{a="11";if(a >= 9){print "ok";}else{print "error"}}'
2error
3[root@361way ~]# awk 'BEGIN{a=11;if(a >= 9){print "ok";}}'
4ok
5、awk算术运算符
在算术运算符中进行操作,操作数自动转为数值,所有非数值都变为0,如下例中的字符串b:
1[root@361way ~]# awk 'BEGIN{a="b";print ++a;}'
21
3[root@361way ~]# awk 'BEGIN{a="b";print a++,++a;}'
40 2
这个没什么好说明的,a++是先输出a再自增,++a是先自增再输出结果,和C语言中的用法一样。示例2中的++a为什么是呢?为了便于理解可以上行两个对比就发现了。先a++后,a的值就变成了1,而++a又加了1,结果就是2 。
6、其它运算符
主要常用的是三元运算和in判读,如下:
1[root@361way ~]# awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}'
2[root@361way ~]# awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}'
31
4# for循环加";"号
5[root@361way ~]# awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";for(x in arr);print arr[x];}'
6c
7[root@361way ~]# awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";for(x in arr);print arr[x]}'
8b
9# for循环不加";"号
10[root@361way ~]# awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";for(x in arr)print x"="arr[x];}'
110=b
121=c
13[root@361way ~]# awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";for(x in arr)print x"="arr[x]}'
14b=c
150=b
注意,这里有点弯弯饶,awk中array同python中的dict字典一样,而此处判断a是否在arr数组中(判断的是key值,不是value值),所以一个结果是0(非),一个是1(是)。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/awk-operator/4939.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.