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

posted @ 2023-03-19 09:40  往事已成昨天  阅读(13)  评论(0编辑  收藏  举报