image.png

 

第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

 

FSRS

image.png

 

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

 

 

 

image.png

 

2.4 显示所有以41开头的ID号码的人的全名和ID号码

awk '$3~/^41/{print $1,$2,$3}' reg.txt

Zhang Dandan 41117397

Liu Bingbing 41117483

 

 

image.png

 

 

 

2.5 5 显示所有ID号码最后一位数字是15的人的全名

[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

 

image.png

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