三剑客-awk
1.作用特点
排除信息
查询信息
统计信息
替换信息
2.语法格式
awk [参数] ‘模式-动作’ 文件
3.awk命令执行原理

4.命令使用方法
创建测试环境
[root@shuai ~]# cat >>awk_test.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
(1)命令查询信息:
[root@shuai ~]# awk 'NR==2' awk_test.txt (显示文件第二行内容) Zhang Xiaoyu 390320151 :155:90:201 [root@shuai ~]# awk 'NR==2,NR==4' awk_test.txt (显示文件第二行到第四行内容) Zhang Xiaoyu 390320151 :155:90:201 Meng Feixue 80042789 :250:60:50 Wu Waiwai 70271111 :250:80:75 [root@shuai ~]# awk 'NR==2;NR==4' awk_test.txt (显示文件第二,第四行内容) Zhang Xiaoyu 390320151 :155:90:201 Wu Waiwai 70271111 :250:80:75
说明:在Linux系统中
A=2 赋值变量信息
A==2 真正A=2
B:按照字符查询信息:
[root@shuai ~]# awk '/Xiaoyu/' awk_test.txt (查找有Xiaoyu的行) Zhang Xiaoyu 390320151 :155:90:201 [root@shuai ~]# awk '/Xiaoyu/,/Waiwai/' awk_test.txt (查找Xiaoyu到Waiwai的行) Zhang Xiaoyu 390320151 :155:90:201 Meng Feixue 80042789 :250:60:50 Wu Waiwai 70271111 :250:80:75 [root@shuai ~]# awk '/Xiaoyu/;/Waiwai/' awk_test.txt (查找Xiaoyu和Waiwai的行) Zhang Xiaoyu 390320151 :155:90:201 Wu Waiwai 70271111 :250:80:75
(2)练习题:
1.显示xiaoyu的姓氏和ID号码
[root@shuai ~]# awk '/Xiaoyu/{print $1,$3}' awk_test.txt Zhang 390320151
2.姓氏是zhang的人,显示他的第二次捐款金额及他的名字
[root@shuai ~]# awk -F " |:" '/Zhang/{print $1,$3,$9}' awk_test.txt Zhang Dandan 100 Zhang Xiaoyu 90 [root@shuai ~]# awk -F "[ :]" '/Zhang/{print $1,$3,$9}' awk_test.txt Zhang Dandan 100 Zhang Xiaoyu 90 [root@shuai ~]# awk -F "[ :]+" '/Zhang/{print $1,$2,$5}' awk_test.txt Zhang Dandan 100 Zhang Xiaoyu 90

3.显示所有以41开头的ID号码的人的全名和ID号码
[root@shuai ~]# awk '$3~/^41/{print $1,$2,$3}' awk_test.txt #PS:$3~/^41/表示匹配第三列以41开头的 Zhang Dandan 41117397 Liu Bingbing 41117483
4.显示所有ID号码最后一位数字是1或5的人的全名
[root@shuai ~]# awk '$3~/[1,5]$/{print $1,$2}' awk_test.txt Zhang Xiaoyu Wu Waiwai Wang Xiaoai Li Youjiu Lao Nanhai
5.显示Xiaoyu的捐款,每个时都有以$开头, 如$110$220$330
[root@shuai ~]# awk '/Xiaoyu/{gsub(/:/,"$",$NF);print $4}' awk_test.txt $155$90$201
6.删除文件空行
[root@shuai ~]# awk '$0~!/^#|^$/' awk_test.txt
7.取ip地址
[root@shuai ~]# ip a s eth0 | awk -F "[ /]+" 'NR==3{print $3}' 10.0.0.200
总结:
gusb使用方法gsub(/需要替换的内容/,”替换成什么”,需要替换那列)
$NF表是最后一列
$(NF-1)倒数第二列
$0表示整列
5.awk高级功能说明
(1)对日志信息进行统计(计数)
(2)对日志信息进行求和
(3)(数组)进行排序分析
(4)可以进行脚本编写(循环语句 判断语句)
6.awk模式概念说明
普通模式:
01.正则表达式作为模式
awk ‘/^shuai/’ awk_test.txt
02.利用比较匹配信息
NR==2 显示第二列
NR>2 显示第三列到最后一列
NR<2 显示第一列
03.范围模式
NR==2,NR==4 显示第二列到第四列
特殊模式
BEGIN{print } 在awk执行命令前做什么事情,还可以做计算,修改内置变量
[root@shuai ~]# awk 'BEGIN{print "姓","名","ID","捐款记录"}{print $0}' awk_test.txt |column -t姓 名 ID 捐款记录 Zhang Dandan 41117397 :250:100:175 Zhang Xiaoyu 390320151 :155:90:201 [root@shuai ~]# awk 'BEGIN {print 1+1}' 2 [root@shuai ~]# awk 'BEGIN{FS=":"}{print $2}' awk_test.txt 250 155
END{print } 在awk执行命令之后做的事情
[root@shuai ~]# awk 'BEGIN{print "姓","名","ID","捐款记录"}{print $0}END{print "执行结束"}' awk_test.txt |column -t 姓 名 ID 捐款记录 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 执行结束
练习题:
1.统计/etc/services有多少空行
[root@shuai ~]# awk '/^$/{i++}END{print i}' /etc/services 17
2.统计系统中有多少个虚拟用户
[root@shuai ~]# awk '$NF~/nologin$/{i++}END{print i}' /etc/passwd 20
3.统计每个人三次共捐了多少钱
[root@shuai ~]# awk -F "[ :]+" '{sum=$4+$5+$6;print sum}' awk_test.txt 525 446 360 405 525 280 618 550 525
4.统计所有人第一次捐款的总额和第三次捐款的总额,并显示表头
[root@shuai ~]# awk -F "[ :]+" 'BEGIN{print"第一次总计捐款","第二次总计捐款"}{sum=sum+$4;i=i+$6}END{print sum,i}' awk_test.txt |column -t 第一次总计捐款 第二次总计捐款 1880 1486
[root@shuai ~]# awk -F "[ :]+" '{sum=$4+$5+$6;print sum}' awk_test.txt 525 446 360 405 525 280 618 550 525
Linux运维

浙公网安备 33010602011771号