awk文本过率
awk文本过滤
-F -f两者的用法:
内置变量
内置变量的例子:
awk -F: '$1==ENVIRON["USER"]{print $3}' /etc/passwd 输出当前用户的uid值
awk判断环境变量是否相等$1==ENVIRON["USER"]
awk行前,逐行,行后处理
[root@zabbix-server ~]# awk 'BEGIN{x=0}{x++}END{print x}' /etc/passwd
23
[root@zabbix-server ~]# awk 'BEGIN{x=0}/bash$/{x++}END{print x}' /etc/passwd
2
[root@zabbix-server ~]# awk 'BEGIN{x=0}/\<bash$/{x++}END{print x}' /etc/passwd
2
[root@zabbix-server ~]# cat /etc/passwd |grep -i bash
root:x:0:0:root:/root:/bin/bash
zszc:x:1000:1000:zszc:/home/zszc:/bin/bash
BEGIN一开始当前处理的行数为0 END最后处理的行数为23
[root@zabbix-server ~]# awk 'BEGIN{print NR}END{print NR}' /etc/passwd
0
23
使用awk显示文件里面总共有多少行
awk 'END{print NR}' /etc/passwd
23
[root@zabbix-server ~]# awk '/^root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@zabbix-server ~]# awk '/^ro/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@zabbix-server ~]# awk -F: '/^ro/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@zabbix-server ~]# awk -F: '/bash$/{print $1,$7}' /etc/passwd
root /bin/bash
zszc /bin/bash
列出不以bash结尾的用户和命令解释器
[root@zabbix-server ~]# awk -F: '$7!~/bash$/{print $1,$7}' /etc/passwd
计算出同时能被3和13整除的个数:
[root@zabbix-server ~]# seq 200 |awk 'NR%3==0&&NR%13==0{print NR}'
39
78
117
156
195
[root@zabbix-server ~]# seq 200 |awk 'BEGIN{i=0}NR%3==0&&NR%13==0{i++}END{print i}'
5
awk的if流程控制
[root@zabbix-server ~]# awk 'BEGIN{x=0;y=0}{if($3<=500){x++}else{y++}}END{print "uid小于500的值个数"x,"uid大于500的值个数是:"y}' /etc/passwd
uid小于500的值个数18 uid大于500的值个数是:5
[root@zabbix-server ~]# awk 'BEGIN{x=0;y=0}{if($3<=500){x++}else{y++}}END{print "uid小于500的值个数"x, "uid大于500的值个数是:"y}' /etc/passwd
uid小于500的值个数18 uid大于500的值个数是:5
[root@zabbix-server ~]# awk 'BEGIN{x=0;y=0}{if($3<=500){x++}else{y++}}END{print "uid小于500的值个数:"x, "uid大于500的值个数是:"y}' /etc/passwd
uid小于500的值个数:18 uid大于500的值个数是:5
awk的while流程控制
awk的for循环控制
awk 'BEGIN{for(x=0;x<=100;x++){print x}}'
显示100个数字即100行
[root@zabbix-server ~]# seq 100 |head -1
1
[root@zabbix-server ~]# seq 100 |tail -1
100
awk计算0-100之内自然数之和
echo '' |awk 'BEGIN{y=0}END{for(x=1;x<=100;x++){y+=x};{print y}}'