2.14. 2017-12-28-练习awk

awk学习笔记

2.14.1. 练习1-awk

1、统计/etc/fstab文件中每个文件系统类型出现的次数

[root@centos74 test]$ cat /etc/fstab |awk ' /^[^#]/ {print $3}' | sort  |uniq -c
        3 ext4

[root@centos74 test]$ cat /etc/fstab |awk ' /^[^#]/ {arr[$3]++} END{for (i in arr){print arr[i],i}}'
3 ext4

2、统计/etc/fstab文件中每个单词出现的次数

[root@centos74 test]$ cat /etc/fstab | awk '{for (i=1;i<=NF;i++){arr[$i]++}} END { for(i in arr){print i,arr[i]}}'

3、提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字

[root@centos74 test]$ echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw"  |tr -dc "[:digit:]"

[root@centos74 test]$ echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw"  |awk -F "" '{for (i=1;i<=NF;i++){if ($i ~ /[[:digit:]]/){printf "%s" , $i }}print ""}'
05973

4、解决DOS攻击生产案例:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT

netstat -tup | awk '/tcp/ {socket=$5; split(socket,tmps,":");ss[tmps[1]]++} END {for (i in ss){if (ss[i] >0){cmd="iptables -A INPUT -s "i" -j REJECT"; system(cmd);} }}'