16.文本处理之awk--案例分析
1.文件host_list.log 如下格式,请提取”.magedu.com”前面的主机名部分并写入到回到该文件中。
1 www.magedu.com
2 blog.magedu.com
3 study.magedu.com
4 linux.magedu.com
5 python.magedu.com
......
999 study.magedu.com
[root@localhost /data]#cat host_list.log
1 www.magedu.com
2 blog.magedu.com
3 study.magedu.com
4 linux.magedu.com
5 python.magedu.com
......
999 study.magedu.com
[root@localhost /data]#awk -F'[ .]' '{print $2}' host_list.log >> host_list.log
[root@localhost /data]#cat host_list.log
1 www.magedu.com
2 blog.magedu.com
3 study.magedu.com
4 linux.magedu.com
5 python.magedu.com
......
999 study.magedu.com
www
blog
study
linux
python
study
2.统计/etc/fstab文件中每个文件系统类型出现的次数。
[root@localhost /data]#awk -F'[[:space:]]+' '/^UUID/{print $3}' /etc/fstab |uniq -c
3 xfs
1 swap
[root@localhost /data]#cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Aug 3 17:02:43 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=71b66acd-688f-45df-8d45-1d3cf606820f / xfs defaults 0 0
UUID=1890737d-134e-49aa-a764-569a2bd251d8 /boot xfs defaults 0 0
UUID=82c012a2-3f30-4649-ac90-e9896c20f829 /data xfs defaults 0 0
UUID=87716ee2-fda6-41e2-9d46-4d42bd7bb257 swap swap defaults 0 0
3.统计/etc/fstab文件中每个单词出现的次数。
[root@localhost /data]#cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Aug 3 17:02:43 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=71b66acd-688f-45df-8d45-1d3cf606820f / xfs defaults 0 0
UUID=1890737d-134e-49aa-a764-569a2bd251d8 /boot xfs defaults 0 0
UUID=82c012a2-3f30-4649-ac90-e9896c20f829 /data xfs defaults 0 0
UUID=87716ee2-fda6-41e2-9d46-4d42bd7bb257 swap swap defaults 0 0
[root@localhost /data]#awk '{for(i=1;i<=NF;i++)word[$i]++}END{for (a in word) print a,word[a]}' /etc/fstab
man 1
2020 1
and/or 1
maintained 1
xfs 3
Accessible 1
# 7
are 1
UUID=71b66acd-688f-45df-8d45-1d3cf606820f 1
defaults 4
blkid(8) 1
/ 1
0 8
See 1
3 1
Mon 1
Created 1
on 1
mount(8) 1
anaconda 1
fstab(5), 1
UUID=82c012a2-3f30-4649-ac90-e9896c20f829 1
/boot 1
findfs(8), 1
'/dev/disk' 1
by 2
/etc/fstab 1
pages 1
more 1
/data 1
UUID=87716ee2-fda6-41e2-9d46-4d42bd7bb257 1
info 1
UUID=1890737d-134e-49aa-a764-569a2bd251d8 1
Aug 1
swap 2
17:02:43 1
filesystems, 1
reference, 1
for 1
under 1
4.提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字。
[root@localhost /data]#echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw" | awk '{gsub(/[^0-9]/,"");print $0}'
05973
5.有一文件记录了1-100000之间随机的整数共5000个,存储的格式100,50,35,89…请取出其中最大和最小的整数。
[root@localhost /data]#for i in {1..5000};do echo -n $((($RANDOM+90000)%100000)),>>random.txt;done
[root@localhost /data]#awk -F, '{max=$1;min=$1;for(i=1;i<NF;i++){if($i>max){max=$i}else{if($i<min){min=$i}}}}END{print "最大值:"max,"最小值:"min}' random.txt
最大值:99999 最小值:1
6.解决Dos攻击生产案例:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT
[root@localhost /data]#ss -nt | awk -F " +|:" '{ip[$4]++}END{for(i in ip){if(ip[i]>100){system("iptables -A INPUT -s "i" -j REJECT")}}}'
7.将以下文件内容中FQDN取出并根据其进行计数从高到低排序
http://mail.magedu.com/index.html
http://www.magedu.com/test.html
http://study.magedu.com/index.html
http://blog.magedu.com/index.html
http://www.magedu.com/images/logo.jpg
http://blog.magedu.com/20080102.html
http://www.magedu.com/images/magedu.jpg
[root@localhost /data]#awk -F"/" '{url[$3]++}END{for(i in url){print url[i],i}}' http.log |sort -nr
3 www.magedu.com
2 blog.magedu.com
1 study.magedu.com
1 mail.magedu.com
[root@localhost /data]#cat http.log
http://mail.magedu.com/index.html
http://www.magedu.com/test.html
http://study.magedu.com/index.html
http://blog.magedu.com/index.html
http://www.magedu.com/images/logo.jpg
http://blog.magedu.com/20080102.html
http://www.magedu.com/images/magedu.jpg
8.将以下文本以inode为标记,对inode相同的counts进行累加,并且统计出同一inode中,beginnumber的最小值和endnumber的最大值
inode|beginnumber|endnumber|counts|
106|3363120000|3363129999|10000|
106|3368560000|3368579999|20000|
310|3337000000|3337000100|101|
310|3342950000|3342959999|10000|
310|3362120960|3362120961|2|
311|3313460102|3313469999|9898|
311|3313470000|3313499999|30000|
311|3362120962|3362120963|2|
输出的结果格式为:
310|3337000000|3362120961|10103|
311|3313460102|3362120963|39900|
106|3363120000|3368579999|30000|