练习
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@centos8 ~]#awk -F'[ .]' '{print $2}' host_list.log >> host_list.log
2、统计/etc/fstab文件中每个文件系统类型出现的次数
[root@centos8 ~]#awk '/^(UUID|\/dev)/{print $3}' fstab |sort|uniq -c
或者
[root@centos8 ~]#awk '/^(UUID|\/dev)/{type[$3]++}END{for(i in type){print type[i],i}}' fstab
3、统计/etc/fstab文件中每个单词出现的次数
[root@centos8 ~]#awk '{for(i=1;i<NF;i++){count[$i]++}}END{for(i in count) {print i,count[i]}}' /etc/fstab
4、提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字
[root@centos8 ~]#echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw" |awk '{gsub(/[^0-9]/,"");{print $0}}'
或者
[root@centos8 ~]#echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw" |grep -o '[0-9]'|tr -d '\n'
5、有一文件记录了1-100000之间随机的整数共5000个,存储的格式100,50,35,89…请取出其中最大和最小的整数
[root@centos8 ~]# awk -F "," '{min=$1;max=$1;for(i=1;i<=NF;i++){if($i>=max){max=$i} else if(min>=$i)min=$i}print min,max}' num.txt
6、解决Dos攻击生产案例:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT
[root@centos8 ~]#vim deny_dos.sh
#!/bin/bash
while true ;do
awk '/^[0-9]/{IP[$1]++}END{for(i in IP){if (IP[i]>=100)print i}}' /var/log/httpd/access_log | while read line;do iptables -A INPUT -s $line -j REJECT
done
sleep 300
done
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@centos8 ~]#awk -F'/+' '{print $2}' test.txt |sort|uniq -c|sort -nr
或者
[root@centos8 ~]#awk -F'/+' '{fqdn[$2]++}END{for(i in fqdn)print fqdn[i],i}' test.txt |sort -nr
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|
[root@centos8 ~]#awk '!line[$0]++' test2.txt