awk使用方式:
1,前置指令 | awk 选项 条件 指令
2,awk 选项 条件 指令 被处理文档
选项 -F 定义分隔符
指令 print 输出
1.awk的基本使用
vim test.txt //准备素材,写入下列两行内容
hello the world
welcome to beijing
cp /etc/passwd /root/user
awk的内置变量: $1第1列 $2第2列 $3第3列 $0所有列 NR 行号 NF列号
awk '{print}' test.txt //输出test所有行所有列
awk '{print $1}' test.txt //输出test所有行第1列
awk '{print $2}' test.txt //输出test所有行第2列
awk '/world/{print $2}' test.txt //找到有world的行,然后输出第2列
awk '{print $0,$1}' test.txt //找所有行的所有列和第1列
awk '{print NR}' test.txt //输出每行的行号
awk -F: '{print $1" 的解释器是 "$7}' user //使用冒号作为分隔符,输出第1列,第7列,中间加常量,常量要使用双引号
利用awk提取本机的网络流量信息
ifconfig eth0 | awk '/RX p/{print "eth0网卡的接收流量是"$5"字节"}'
ifconfig eth0 | awk '/TX p/{print "eth0网卡的发送流量是"$5"字节"}'
使用awk提取根分区剩余容量
df -h | awk '/\/$/{print "根分区剩余容量是"$4}'
2.awk中的条件
a.用正则作为条件 ~ 包含 !~ 不包含
awk -F: '/bin/{print $1}' user //输出有bin的行的第1列
awk -F: '$5~/bin/{print $1}' user //输出第5列包含bin的行的第1列
awk -F: '$5!~/bin/{print $1}' user //输出第5列不包含bin的行的第1列
b.使用数字、字符串
awk -F: 'NR==3{print}' /etc/passwd //输出第3行
awk -F: '$3<10{print}' /etc/passwd //输出UID小于10的行
awk -F: '$3>=1000{print}' /etc/passwd //输出UID大于等于1000的行
awk -F: '$7=="/bin/bash"{print}' /etc/passwd //输出使用/bin/bash的用户
awk -F: '$7!="/bin/bash"{print}' /etc/passwd //输出没使用/bin/bash的用户
awk -F: 'NR<11{print $1}' /etc/passwd //查看前10行,并显示用户名
awk -F: '$7==" /bin/bash"{print $6}' /etc/passwd //查看使用/bin/bash解释器的用户,并显示家目录
c.逻辑组合 &&并且 ||或者
awk -F: '$3<10&&$7~/bash/{print}' /etc/passwd //找第3列小于10并且第7列包含bash的行,{print}可以省略
awk -F: '$3>=10&&$3<=20{print}' /etc/passwd //找第3列大于等于10并且小于等于20的行
awk -F: 'NR>=2&&NR<=10{print}' /etc/passwd //找2~10行
awk -F: '$3<5||$3>1000{print}' /etc/passwd //找id号是小于5的或者大于1000的
3.在awk中使用if分支
{if (条件){指令}else if (条件){指令}else{指令}}
awk -F: '{if($7~/bash/){x++}else if($7~/nologin/){y++}else{z++}}END{print x,y,z}' /etc/passwd //统计系统中使用bash作为解释器的用户,使用nologin的用户,还有其他用户的数量
4.在awk中使用for循环遍历数组
awk 'BEGIN{a[1]=10;a[2]=20;for(i in a){print i}}'