awk练习

这篇博客通过一系列awk实战例子,展示了如何利用awk工具提取文件中的特定信息,包括提取域名、统计文件系统类型和单词频率、找出整数范围以及解决DoS攻击等场景。此外,还涉及到对重复FQDN的计数排序和基于inode的数据聚合分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、文件host_list.log如下格式,请提取".magedu.com"前面的主机名部分并写入到回到该文件中

1 www.magedu.com
2 b1og.magedu.com
3 study.magedu.com
4 1inux.magedu.com
5 python.magedu.com
.....
999 study.magedu.com
awk -F'[ .]' '{print $2}' host_list.log >>host_list.log 

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

[root@centos8 ~]#awk  '/^UUID/{print $3}' /etc/fstab |sort |uniq -c
      1 ext4
      1 swap
      2 xfs

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

awk -F'[^[:alnum:]_]+'  '{for(i=1;i<=NF;i++){print $i}}' /etc/fstab |awk '/[[:alnum:]_]+/{print $1}'|sort |uniq -c |sort -nr

awk '{gsub(/[^[:alnum:]_]/," ")}{for(i=1;i<=NF;i++){print $i}}' /etc/fstab |sort|uniq -c|sort -nr

awk '{gsub(/[^[:alnum:]_]/," ")}{for(i=1;i<=NF;i++)word[$i]++}END{for(i in word)print i,word[i]}' /etc/fstab |sort -k2nr

4、提取出字符串Yd$C@M05MB9%9&Bdh7dq+ Wixp3vpw中的所有数字

[root@centos8 ~]#echo "Yd$C@M05MB9%9&Bdh7dq+ Wixp3vpw" |awk 'gsub(/[^0-9]/,"")'
059973

5、有一文件记录了1-100000之间随机的整数共5000个,存储的格式100,505.,9…请取出其中最大和
最小的整数

awk -F',' '{max=$1;min=$1;for(i=1;i<=NF;i++){if($i>max){max=$i}if($i<min){min=$i}}print min,max}' f1.txt

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

[root@centos8 ~]#cat ss.sh
#!/bin/bash
#Version:                 1.1
#**********************************************************************
ss -nt|awk -F' +|:' 'NR!=1{ip[$(NF-2)]++}END{for(i in ip){if(ip[$i]>=100){system("iptables -A INPUT -s "i" -j REJECT")}}}'
[root@centos8 ~]#chmod +x ss.sh
[root@centos8 ~]#crontab -e
*/5 * * * * root ss.sh#要写路径
[root@centos8 ~]#cat ss.sh 
#!/bin/bash
#Version:                 1.1
#**********************************************************************

while :;do
ss -nt|awk -F' +|:' 'NR!=1{ip[$(NF-2)]++}END{for(i in ip){if(ip[$i]>=100){system("iptables -A INPUT -s "i" -j REJECT")}}}'
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'/' '{FQDN[$3]++}END{for(i in FQDN){print FQDN[i],i}}' file |sort -nr
3 www.magedu.com
2 blog.magedu.com
1 study.magedu.com
1 mail.magedu.com

8、将以下文本以inode为标记,对inode相同的counts进行累加,并且统计出同一 inode中,beginnumber的最小值和endnumber的最大值

inode | beginnumber I endnumber I counts|
106 | 3363120000 | 3363129999 | 10000 |
106 | 3368560000 | 3368579999 | 20000 |
310 | 3337000000 | 3337000100 | 101 |
310 | 3342950000 I 3342959999 | 10000 |
310 | 3362120960 I 3362120961 | 2 |
311 | 3313460102 | 3313469999 | 9898 |
311 | 3313470000 I 3313499999 | 30000 |
311 | 3362120962 | 3362120963 | 2 |

输出的结果格式为:

310 | 3337000000 | 3362120961 | 10103 |
311 | 3313460102 | 3362120963 | 39900 |
106 | 3363120000 I 3368579999 | 30000 |

[root@centos8 ~]#awk -F'|' -v OFS='|' 'NR==1{print $0}  \
NR>1{inode[$1]++;if(!bn[$1]){bn[$1]=$2}else if(bn[$1]>$2){bn[$1]=$2} \
;if(en[$1]<$3)en[$1]=$3;cnt[$1]+=$(NF-1)} \
END{for(i in inode)print i,bn[i],en[i],cnt[i]"|"}' inode.txt 
inode|beginnumber|endnumber|counts|
106|3363120000|3368579999|30000|
310|3337000000|3362120961|10103|
311|3313460102|3362120963|39900|
[root@centos8 ~]#cat test.awk 
#!/bin/awk
NR==1{print $0};NR>1{array[$1][$2][$3][$4]++}NR==2{val=$1;min=$2;max=$3;num=0}
END{
	for(i in array)
		for (j in array[i])
			for (k in array[i][j])
				for (h in array[i][j][k])
					{if(i==val)
						{j<=min?min=j:min=min
						k>=max?max=k:max=max
						num+=h}
					else {print val,min,max,num "|"
						val=i
						min=j
						max=k
						num=h
						}}print val,min,max,num "|"}

[root@centos8 ~]#awk -F'|'  -v OFS='|' -f test.awk  inode.txt 
inode|beginnumber|endnumber|counts|
106|3363120000|3368579999|30000|
310|3337000000|3362120961|10103|
311|3313460102|3362120963|39900|
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值