第1章 awk 的内置变量
1.1 RS:(每一行之间如何分割)
record separator 默认为回车
1.1.1 创建环境:
head /etc/passwd >passwd.txt
实例1-1 以/作为 记录分隔符 显示行号和文件内容
[root@zs ~]# awk -vRS="/" '{print NR $0}' passwd.txt
FS和RS
awk 模式(条件)
模式-pattern 条件 帮助你找到想要的行
1. 正则表达式
~ 某一列中包含XXX
例:awk ‘$3’ ~ /4/’ oldboy.txt
第三列中 包含 数字4
^ 以什么开头
$ 以什么结尾
.* 匹配任意字符
^$ 空行
\ 转义字符 backslash 脱掉马甲打回原形
[] 匹配集合中的
+ 重复前一个字符或一个以上(多个)
() 分组过滤匹配
* 匹配0个或多个
{}
? 0个或1个字符
| 表示或,查找多个字符串
awk ‘//’
2.比较表达式
$5>500
NR>20
>
>=
第2章
2.1 创建环境
mkdir -p /server/files/
cat >>/server/files/reg.txt<<EOF
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
EOF
第一列是姓氏
第二列是名字
第一第二列合起来就是姓名
第三列是对应的ID号码
最后三列是三次捐款数量
2.2 #第3列中 以数字4开头的
[root@zs files]# awk '$3~/^4/' reg.txt
Zhang Dandan 41117397 :250:100:175
Liu Bingbing 41117483 :250:100:175
2.3 显示Xiaoyu的姓氏和ID号码
[root@zs files]# cat reg.txt
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
[root@zs files]# awk '$2~/Xiaoyu/{print $1,$3}' reg.txt
Zhang 390320151
2.4 显示所有以41开头的ID号码的人的全名和ID号码
awk '$3~/^41/{print $1,$2,$3}' reg.txt
Zhang Dandan 41117397
Liu Bingbing 41117483
2.5 5 显示所有ID号码最后一位数字是1或5的人的全名
[root@zs /server/files ]#awk '$3~/[15]$/{print $1,$2}' reg.txt
Zhang Xiaoyu
Wu Waiwai
Wang Xiaoai
Li Youjiu
Lao Nanhai
2.6 显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135
gsub awk内置命令(函数)
gsub(//,"",某一列)
gsub(/找谁/,"替换为什么",某一列)
gsub(/找谁/,"替换为什么") === gsub(/找谁/,"替换为什么",$0)
[root@zs files]# awk 'NR==2{gsub(/:/,"$",$4);print $4}' reg.txt
$155$90$201
2.7 显示所有人的全名,以姓,名的格式显示,如Meng,Feixue
[root@zs files]# awk -vOFS=, '{print $1,$2}' reg.txt
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai
[root@zs files]# awk '{print $1","$2}' reg.txt
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai
第3章 2.比较表达式
$5>500
NR>20
>
>=
==
!=
<=
<
3.1 显示出磁盘使用率大于20%的磁盘分区名称和挂载点
[root@zs files]# df -h|awk '$5>20{print $1,$NF}'
Filesystem on
/dev/sda3 /
3.2 故障 $5>9
3.2.1 原因:这里是当作了字符串
[root@zs files]# df -h|awk '$5>2{print $1,$5,$NF}'
Filesystem Use% on
/dev/sda3 62% /
[root@zs files]# df -h|awk '$5<9{print $1,$5,$NF}'
/dev/sda3 62% /
tmpfs 0% /dev/shm
/dev/sda1 19% /boot
3.2.2 解决方法1-指定分隔符只保留数字部分
[root@zs files]# df -h |awk -F "[ %]+" 'NR>1&&$5>9'
/dev/sda3 19G 11G 6.8G 62% /
/dev/sda1 190M 35M 146M 19% /boot
[root@zs files]# df -h |awk -F "[ %]+" 'NR>1&&$5<9'
tmpfs 491M 0 491M 0% /dev/shm
3.2.3 解决方法-2 某一列+0
[root@zs files]# df -h| awk '$5+0<9'
Filesystem Size Used Avail Use% Mounted on
tmpfs 491M 0 491M 0% /dev/shm
[root@zs files]# df -h| awk '$5+0>09'
/dev/sda3 19G 11G 6.8G 62% /
/dev/sda1 190M 35M 146M 19% /boot