awk用法实例
1.统计以下文本内容中每个数字出现的次数
创新互联公司从2013年开始,先为磴口等服务建站,磴口等地企业,进行企业商务咨询服务。为磴口企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
[liuwei@test tmp]$ cat 1.log 1 2 2 3 3 4 100 1 100 100 100 [liuwei@test tmp]$ awk '{for(i=1;i<=NF;i++)s[$i]++}END{for(key in s)print key,s[key]}' 1.log 4 1 100 4 1 2 2 2 3 2
2.统计上面文本中100出现的次数
#方法1 [liuwei@test tmp]$ awk '{for(i=1;i<=NF;i++)if($i==100)sum++}END{print sum}' 1.log 4 #方法2 [liuwei@test tmp]$ awk '{for(i=1;i<=NF;i++)s[$i]++}END{for(key in s)if(key==100)print key,s[key]}' 1.log 100 4 #方法3,不用awk进行统计 [liuwei@test tmp]$ grep -o "100" 1.log | wc -l
3.统计下面语句中,每个单词及字符出现的个数
the squid project provides a number of resources toassist users design,
implement and support squid installations. Please browsethe documentation
and support ections for more infomation
#统计字符出现次数 [liuwei@test tmp]$ grep -o "\w" word.txt | awk '{s[$1]++}END{for(key in s)print key,s[key]}' #统计每个单词出现次数 #方法1,直接遍历每行的每个字段进行累计 [liuwei@test tmp]$ awk -F '[ ,.]+' '{for(i=1;i<=NF;i++)s[$i]++}END{for(key in s)print key,s[key]}' word.txt for 1 toassist 1 number 1 users 1 project 1 of 1 more 1 ections 1 documentation 1 resources 1 a 1 provides 1 Please 1 browsethe 1 installations 1 and 2 support 2 implement 1 the 1 infomation 1 squid 2 design 1 #方法2,利用输入字段分隔符把每个单词变为单独的一行再行进统计 [liuwei@test tmp]$ awk -v RS='[ ,.]+' '{s[$1]++}END{for(key in s)print key,s[key]}' word.txt
4.打印出haproxy.log(nginx,tomcat等都可以用)中指定时间段内的日志,以便于进行分析
[liuwei@test tmp]$ awk '{if($3>="20:00:00" && $3<="20:15:59")print $0}' haproxy.log 也可以写为: [liuwei@test tmp]$ awk '$3>="20:00:00"&&$3<="20:15:59"{print $0}' haproxy.log
5.AWK笔试题-->获取本机的IP地址和掩码
#方法一,利用脚本的配置文件(source)进行获取,source的作用是将某个文件变成此脚本的配置文件 source /etc/sysconfig/network-scripts/ifcfg-eth0 printf "IP地址:%s\t子网掩码:%s\n" $IPADDR $NETMASK #方法二:利用awk地址定界 file=/etc/sysconfig/network-scripts/ifcfg-eth0 awk -F= '/IPADDR/,/NETMASK/{print $2}' $file #方法三:利用awk的或条件 awk -F= '$1=="IPADDR"||$1=="NETMASK"{print $1,$2}' $file 知识点1:source的作用 知识点2:awk匹配连续多个字段的写法;/IPADDR/,/NETMASK/表示匹配IPADDR与NETMASK之间的所有内容
6.统计当前服务器每个外部IP的连接个数
#方法1,原理-->先以空格为分隔符得到第5个字段,再以冒号为分隔符得到IP字段 [liuwei@test tmp]$ netstat -tan | awk '/^tcp\>/{print $5}' | awk -F: '{s[$1]++}END{for(key in s)print key,s[key]}' #方法2,利用split函数-->需要知道split函数每个参数是什么意思,此方法看起来很高端啊 netstat -tan | awk '/^tcp\>/{split($5,ip,":");s[ip[1]]++}END{for(key in s)print key,s[key]}' 知识点:awk中split函数的用法,在此例中表示以冒号为分隔符将$5的内容进行分隔,存储到ip数组中
7.要求文件a里的数据依次替换文件b中的xxx字样。
[liuwei@test tmp]$ cat a
aaa
bbb
ccc
ddd
[liuwei@test tmp]$ cat b
111 xxx
222 xxx
333 xxx
444 xxx
#方法1,利用getline函数进行实现 [liuwei@test tmp]$ awk '{getline i<"a";print $1,i}' b 111 aaa 222 bbb 333 ccc 444 ddd #方法2,同时利用geline,sub函数进行实现 [liuwei@test tmp]$ awk '{getline i<"a";sub("xxx",i,$2)}1' b 111 aaa 222 bbb 333 ccc 444 ddd 知识点1:getline函数用于从文本中按行读取内容,并且可以将内容赋值给变量 知识点2:awk中sub函数的用法,在此例中表示查找$2中的第一次出现的xxx,并且用变量i的值进行替换 知识点3:awk中gub函数的用法,跟sub函数用法一样,不过sub只替换第一次找到的,gub表示替换全部的
8.统计第2列的和;统计第1列中出现的内容,并统计出对应的第2列的和
[root@instance-d4u5ahgn tmp]# cat sumb.txt
1 76
2 78
1 75
2 99
4 100
3 12
#统计第2列的和 [root@instance-d4u5ahgn tmp]# awk '$1==1{sum+=$2}END{print sum}' sumb.txt 151 #统计第1列中出现的内容,并统计出对应的第2列的和 [root@instance-d4u5ahgn tmp]# awk '{s[$1]+=$2}END{for(key in s)print key,s[key]}' sumb.txt 4 100 1 151 2 177 3 12
本文标题:awk用法实例
文章来源:http://scyanting.com/article/igehsg.html