1.文件ip_list.txt如下格式,请提取“.magedu.com”前面的主机部分并出入回到该文件中
1 blog.magedu.com
2 www.magedu.com
....
999 study.magedu.com
解法:
awk -F '[ .]' '{print $2}' ip_list.txt >> ip_list.txt
2.统计/etc/fstab文件中每个文件系统类型出现的次数
文件内容:
#
# /etc/fstab
# Created by anaconda on Wed Apr 24 21:34:19 2019
#
# 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
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=3a3ed56a-b439-4fe9-951a-3c39a8fc9ece /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 /data xfs defaults 0 0
解法:
~]# awk '/^\/dev|^UUID/{file_type[$3]++}END{for(i in file_type){print file_type[i],i}}' /etc/fstab
1 swap
4 xfs
注解:
(1)/^\/dev|^UUID/ 用来筛选以/dev或者UUID开头的行,因为存在/,所以需要用\进行转义
(2)file_type[$3]是把文件类型作为索引数组,然后重复重复出现的文件类型会让索引对应的值递增。
(3)for(i in file_type)是为了循环数组,把属组的索引和值都提出来展示。
3.统计/etc/fstab文件中每个单词出现的次数
解法:
~]# awk -F '[^[:alnum:]]+' '!/^$/{i=1;while(i<=NF){if($i ~ /[[:alnum:]]+/)word[$i]++;i++}}END{for(j in word){print word[j],j}}' /etc/fstab | sort -nr
10 0
5 dev
5 defaults
4 xfs
3 swap
3 mapper
3 centos
3 8
2 home
2 fstab
2 by
1 Wed
1 UUID
1 under
1 See
1 sdb1
1 root
1 reference
1 pages
1 or
1 on
1 mount
1 more
1 man
1 maintained
1 info
1 for
1 findfs
1 filesystems
1 etc
1 disk
1 data
1 Created
1 boot
1 blkid
1 b439
1 are
1 Apr
1 and
1 anaconda
1 Accessible
1 951a
1 5
1 4fe9
1 3c39a8fc9ece
1 3a3ed56a
1 34
1 24
1 21
1 2019
1 19
注解:
(1)-F '[^[:alnum:]]+' 代表以任何非数字或非字母的符号作为分隔符
(2)!/^$/ 这个意思是排除空行
(3)i=1;while(i<=NF)这个循环每一行里面的所有列
(4)$i ~ /[[:alnum:]]+/ 这个代表当列匹配为数字或者字母时
(5)word[$i]++ 创建属组,以数字或字母为索引,以出现的次数为值
(6)END{for(j in word){print word[j],j}} 循环属组,得到每个单词出现和出现的次数
4.提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字
方法1:
echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw" | egrep -o '[[:digit:]]'
方法2:
~]# echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw" | sed -n 's#[^0-9]##gp'
05973
方法3:
echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw" | awk -F '[^0-9]' '{i=1;while(i<=NF){if($i ~ /[[:digit:]]/)printf"%s",$i;i++}}'
5、有以文件记录了1-1000000之间随机的整数共5000个,存储的格式100,50,35,89...请取出其中最大和最小的整数
解法:
]# awk -F, '{i=1;max=$i;min=$i;while(i<=NF){if($i>max)max=$i;else if($i<min)min=$i;i++}}END{printf "max:%s min:%s\n",max,min}' num.txt
max:4343 min:10
6、解决DOS攻击生产案例:根据web日志或者或者网络连接数,监控当某个IP 并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频 率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT
1>编辑脚本
vim ddos.sh
ss -ant |awk -F ' +|:' '/ESTAB/{ip[$6]++}END{for(i in ip)if(ip[i]>=100){system("iptables -A INPUT -s "i " -j DROP")}}'
2>增加脚本权限
chmod +x ddos.sh
3>设置定时任务
*/5 * * * * /opt/ddos.sh
7.将以下文件内容中FQDN取出并根据其进行计数从高到低排序
https://mail.magedu.com/index.html
https://www.magedu.com/test.html
https://stduy.magedu.com/index.html
https://blog.magedu.com/index.html
https://www.magedu.com/imagex/logo.jpg
https://blog.magedu.com/20080102.html
解法:
]# awk -F '/' '{fqdn[$3]++}END{for(i in fqdn){print fqdn[i],i}}' awk.sh | sort -nr
2 www.magedu.com
2 blog.magedu.com
1 stduy.magedu.com
1 mail.magedu.com
8.计算男女生的平均成绩
原始文档:
name gender score
a m 100
b f 99
c f 98
d m 80
解法:
]# awk 'NR>1{gen[$2]++;score[$2]+=$3}END{for(i in gen){print i,score[i]/gen[i]}}' score.txt
m 90
f 98.5
awk练习
最新推荐文章于 2023-08-08 17:02:22 发布
261

被折叠的 条评论
为什么被折叠?



