#user文件内容
Debian-snmp:x:124:126::/var/lib/snmp:/bin/false
zabbix:x:125:127::/var/lib/zabbix/:/usr/sbin/nologin
test:x:1001:1001:,,,:/home/test:/bin/bash
postfix:x:126:128::/var/spool/postfix:/usr/sbin/nologin
che:x:1002:1002:,,,:/home/che:/bin/bash
前置指令  |  awk  选项  条件  指令
awk 选项  条件  指令  文件
选项  -F  定义分隔符
指令print
条件root
内置变量 $1第一列 $2第二列 $0所有列 NR行号 NF列号
awk '/the/{print $1,$3}'  #awk默认以空格作为列的区分
awk '/the/{print NR}'
awk '{print}' abc.txt  #输出所有
awk '/to/{print}'  abc.txt  #输出有to的那行
awk '{print $2}' abc.txt  输出所有行的第二列
awk '/to/{print $2}' abc.txt  输出有to的那行的第二列
awk '{print NR}' abc.txt  输出每一行的行号
awk '{print NR $0}' abc.txt  输出每一行的行号,以及第一列的内容
awk '{print NR NF}' abc.txt  输出每一行的行号,以及每行有几列
awk -F: '{print $1,$5}' abc.txt
awk -F: '{print $1 "的家目录为" $2}'  #输出常量加双引号即可
ifconfig找不到该命令   #系统没有下载工具包
dnf -y install net-tools
root@ubuntu:/opt# cat user
Debian-snmp:x:124:126::/var/lib/snmp:/bin/false

awk -F [:/]  '/root/{print $11}' user  #bin在第11列   每个:或/都是一列
awk -F: '{print "第"$NR"的用户是"$1}' user
df -h  | awk '/\/$/{print "根分区的容量为"$4}'  #\/$  转义字符\ 将/变为普通斜杠
ifconfig  eth0 | awk '/RX p/{print "网卡的接受数据量是"$5"字节"}'
ifconfig  eth0 | awk  '/RT p/{print "网卡的发送数据量是"$5"字节"}'
BEGIN和END
BEGIN读取文件前执行,执行一次
END读取文件后执行,执行一次
awk 'BEGIN{print NR}{print NF}END{print NR}' user     
0   读取文件前为0行
1   读取文件第一行只有一列
5   读取文件第二行只有5列
1   读取文件后,输出一共读取了几行   END中的NR是总行数

awk 'NEGIN{print "start"}{print $1}END{print "over"}' user

awk -F '{print $1"\t"$3"\t"$6}' user   #\t的作用是tab键

echo-------------------------------------------------

Debian-snmp	124	/var/lib/snmp
zabbix	125	/var/lib/zabbix/
test	1001	/home/test
postfix	126	/var/spool/postfix
che	1002	/home/che

awk  -F 'BEGIN{print "User\tUid\tName"}{print $1"\t"$3"\t"$6}END{print "总和"NR"行"}'
~包含 !~不包含
awk -F: '$5~/root/{print}' user   #第五列包含root的行
awk -F: '$5!~/root/{print}' user  #第五列不包含root的行
输入数字或字符串
== != >  >=  <   <=
awk -F: '$3<3{print}' user
awk -F: '$3==3{print}' user
awk -F: '$3<=3{print}' user
awk -F: 'NR==2{print}' user  #行数等于2
awk -F: 'NR>2{print}'  user  #行数大于2
&&并且||或者
awk -F: 'NR>=3&&NR<=5{print}' user  #找行号是大于3并且小于5
awk -F: 'NR==2||NR==4{print}' user  #找行号是2或者4的都行