首页 awk 操作符(三)

awk 操作符(三)

技术张儿 2018-9-20 0 237
标签: Linux·awk

运算符
描述
(....)
分组
$
字段引用
++ --
递增和递减
+ - !
加号,减号,和逻辑否定
* / %
乘,除,取余
+ -
加法,减法
| |&
管道,getline,print和printf
< > <= >= != ==
关系运算符
~ !~
正则表达式匹配,否定正则表达式匹配
in 数组成员
&& ||
逻辑and,逻辑or

简写条件表达式

expr1 ? expr2 : expr3

第一个表达式为真,执行expr2,否则执行expr3
= += -= *= /= %= ^=
变量赋值运算符


1)截取整数(第二个字符串开头不是数字截取0)
[root@VM_16_3_centos ~]# echo "123abc abc123 123abc123"|xargs -n1|awk '{print +$0}'
123
0
123

[root@jz ~]# echo "123abc abc123 123abc123"|xargs -n1|awk '{print -$0}'
-123
0
-123

2)乘法和除法
乘法
[root@jz ~]# seq 3|awk '{print $0*2}'
2
4
6

除法(除尽等于0,除不尽等于1)
[root@jz ~]# seq 3|awk '{print $0%2}'
1
0
1

[root@jz ~]# seq 3|awk '$0%2==0{print $0}'
2
[root@jz ~]# seq 3|awk '$0%2!=0{print $0}'
1
3

3)管道符使用
[root@jz ~]# seq 3|shuf|awk '{print $0|"sort"}'
1
2
3

4)正则()
[root@jz ~]# seq 5|awk '$0~5{print $0}'
5
[root@jz ~]# seq 5|awk '$0!~5{print $0}'
1
2
3
4

[root@jz ~]# seq 5|awk '$0~/[34]/{print $0}'
3
4
[root@jz ~]# seq 5|awk '$0!~/[34]/{print $0}'
1
2
5

5)判断数组成员(如果在就显示下标yes,否则no)
[root@jz ~]# awk 'BEGIN{a["a"]=123}END{if("a" in a)print "yes";else print "no"}' /dev/null 
yes
[root@jz ~]# awk 'BEGIN{b["a"]=123}END{if("a" in b)print "yes";else print "no"}' /dev/null 
yes
[root@jz ~]# awk 'BEGIN{b["a"]=123}END{if("b" in b)print "yes";else print "no"}' /dev/null 
no

6)三目运算
[root@jz ~]# awk 'BEGIN{print 1==1?"yes":"no"}'
yes
[root@jz ~]# awk 'BEGIN{print 1==2?"yes":"no"}'
no
[root@jz ~]# awk 'BEGIN{print 2==2?"yes":"no"}'
yes
[root@jz ~]# awk 'BEGIN{print 2==1?"yes":"no"}'
no

[root@jz ~]# seq 3|awk '{print $0==2?"yes":"no"}'
no
yes
no

7)替换换行符为逗号:
[root@jz ~]# seq 5|awk '{print n=(n?n","$0:$0)}'
1
1,2
1,2,3
1,2,3,4
1,2,3,4,5

[root@jz ~]# seq 5|awk '{n=(n?n","$0:$0)}END{print n}'
1,2,3,4,5

8)每三行后面添加新一行
[root@jz ~]# seq 10|awk '{print NR%3?$0:$0 "\ntxt"}'

9)两行合并一行
[root@jz ~]# seq 6|awk '{printf(NR%2!=0)?$0" ":$0" \n"}'
1 2 
3 4 
5 6 

10)变量赋值
[root@jz ~]# seq 5|awk '{sum+=1}END{print sum}'
5
[root@jz ~]# seq 5|awk '{sum+=$0}END{print sum}'
15
[root@jz ~]# seq 5|awk '{sum+=$0}{print sum}'
1
3
6
10
15

作者: 技术张儿 本文发布于2018-9-20 12:47:09
免责声明:本文仅代表作者个人观点。