AWK实用实例有哪些
发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,今天小编给大家分享一下AWK实用实例有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下
千家信息网最后更新 2025年11月17日AWK实用实例有哪些
今天小编给大家分享一下AWK实用实例有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1、分析访问日志(Nginx为例)
日志格式:'$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"'统计访问IP次数:# awk '{a[$1]++}END{for(v in a)print v,a[v]}' access.log统计访问访问大于100次的IP:# awk '{a[$1]++}END{for(v ina){if(a[v]>100)print v,a[v]}}' access.log统计访问IP次数并排序取前10:# awk '{a[$1]++}END{for(v in a)print v,a[v]|"sort -k2 -nr |head -10"}' access.log统计时间段访问最多的IP:# awk'$4>="[02/Jan/2017:00:02:00" &&$4统计上一分钟访问量:# date=$(date -d '-1 minute'+%d/%d/%Y:%H:%M)# awk -vdate=$date '$4~date{c++}END{printc}' access.log统计访问最多的10个页面:# awk '{a[$7]++}END{for(vin a)print v,a[v]|"sort -k1 -nr|head -n10"}' access.log统计每个URL数量和返回内容总大小:# awk '{a[$7]++;size[$7]+=$10}END{for(v ina)print a[v],v,size[v]}' access.log统计每个IP访问状态码数量:# awk '{a[$1" "$9]++}END{for(v ina)print v,a[v]}' access.log统计访问IP是404状态次数:# awk '{if($9~/404/)a[$1" "$9]++}END{for(i in a)print v,a[v]}' access.log2、两个文件差异对比
文件内容:# seq 1 5 > a# seq 3 7 > b找出b文件在a文件相同记录:方法1:# awk 'FNR==NR{a[$0];next}{if($0 in a)print $0}' a b345# awk 'FNR==NR{a[$0];next}{if($0 in a)print FILENAME,$0}' a bb 3b 4b 5# awk 'FNR==NR{a[$0]}NR>FNR{if($0 ina)print $0}' a b345# awk 'FNR==NR{a[$0]=1;next}(a[$0]==1)' a b # a[$0]是通过b文件每行获取值,如果是1说明有# awk 'FNR==NR{a[$0]=1;next}{if(a[$0]==1)print}' a b345方法2:# awk 'FILENAME=="a"{a[$0]}FILENAME=="b"{if($0 in a)print $0}' a b345方法3:# awk 'ARGIND==1{a[$0]=1}ARGIND==2 && a[$0]==1' a b345找出b文件在a文件不同记录:方法1:# awk 'FNR==NR{a[$0];next}!($0 in a)' a b67# awk 'FNR==NR{a[$0]=1;next}(a[$0]!=1)' a b# awk'FNR==NR{a[$0]=1;next}{if(a[$0]!=1)print}' a b67方法2:# awk'FILENAME=="a"{a[$0]=1}FILENAME=="b" && a[$0]!=1' a b方法3:# awk 'ARGIND==1{a[$0]=1}ARGIND==2 && a[$0]!=1' a b3、合并两个文件
文件内容:# cat azhangsan 20lisi 23wangwu 29# cat bzhangsan manlisi womanwangwu man将a文件合并到b文件:方法1:# awk 'FNR==NR{a[$1]=$0;next}{print a[$1],$2}' a bzhangsan 20 manlisi 23 womanwangwu 29 man方法2:# awk 'FNR==NR{a[$1]=$0}NR>FNR{print a[$1],$2}' a bzhangsan 20 manlisi 23 womanwangwu 29 man将a文件相同IP的服务名合并:# cat a192.168.1.1: httpd192.168.1.1: tomcat192.168.1.2: httpd192.168.1.2: postfix192.168.1.3: mysqld192.168.1.4: httpd# awk 'BEGIN{FS=":";OFS=":"}{a[$1]=a[$1] $2}END{for(v in a)print v,a[v]}' a192.168.1.4: httpd192.168.1.1: httpd tomcat192.168.1.2: httpd postfix192.168.1.3: mysqld解读:数组a存储是$1=a[$1] $2,第一个a[$1]是以第一个字段为下标,值是a[$1] $2,也就是$1=a[$1] $2,值的a[$1]是用第一个字段为下标获取对应的值,但第一次数组a还没有元素,那么a[$1]是空值,此时数组存储是192.168.1.1=httpd,再遇到192.168.1.1时,a[$1]通过第一字段下标获得上次数组的httpd,把当前处理的行第二个字段放到上一次同下标的值后面,作为下标192.168.1.1的新值。此时数组存储是192.168.1.1=httpd tomcat。每次遇到相同的下标(第一个字段)就会获取上次这个下标对应的值与当前字段并作为此下标的新值。4、将第一列合并到一行
# cat file1 2 34 5 67 8 9# awk '{for(i=1;i1 4 72 5 83 6 9解读:for循环是遍历每行的字段,NF等于3,循环3次。读取第一行时:第一个字段:a[1]=a[1]1" " 值a[1]还未定义数组,下标也获取不到对应的值,所以为空,因此a[1]=1 。第二个字段:a[2]=a[2]2" " 值a[2]数组a已经定义,但没有2这个下标,也获取不到对应的值,为空,因此a[2]=2 。第三个字段:a[3]=a[3]3" " 值a[2]与上面一样,为空,a[3]=3 。读取第二行时:第一个字段:a[1]=a[1]4" " 值a[2]获取数组a的2为下标对应的值,上面已经有这个下标了,对应的值是1,因此a[1]=1 4第二个字段:a[2]=a[2]5" " 同上,a[2]=2 5第三个字段:a[3]=a[3]6" " 同上,a[2]=3 6读取第三行时处理方式同上,数组最后还是三个下标,分别是1=1 4 7,2=2 5 8,3=36 9。最后for循环输出所有下标值。5、字符串拆分
字符串拆分:方法1:# echo "hello" |awk -F '''{for(i=1;ihello方法2:# echo "hello" |awk '{split($0,a,"''");for(v in a)print a[v]}'lohel6、统计出现的次数
统计字符串中每个字母出现的次数:# echo "a.b.c,c.d.e" |awk -F'[.,]' '{for(i=1;ia 1b 1c 2d 1e 17、费用统计
得出每个员工出差总费用及次数:# cat azhangsan 8000 1zhangsan 5000 1lisi 1000 1lisi 2000 1wangwu 1500 1zhaoliu 6000 1zhaoliu 2000 1zhaoliu 3000 1# awk '{name[$1]++;cost[$1]+=$2;number[$1]+=$3}END{for(v in name)print v,cost[v],number[v]}' azhangsan 5000 1lisi 3000 2wangwu 1500 1zhaoliu 11000 38、获取某列数字最大数
# cat aa b 1c d 2e f 3g h 3i j 2获取第三字段最大值:# awk 'BEGIN{max=0}{if($3>max)max=$3}END{print max}' a3打印第三字段最大行:# awk 'BEGIN{max=0}{a[$0]=$3;if($3>max)max=$3}END{for(v in a)if(a[v]==max)print v}'ag h 3e f 39、去除文本第一行和最后一行
# seq 5 |awk'NR>2{print s}{s=$0}'234解读:读取第一行,NR=1,不执行print s,s=1读取第二行,NR=2,不执行print s,s=2 (大于为真)读取第三行,NR=3,执行print s,此时s是上一次p赋值内容2,s=3最后一行,执行print s,打印倒数第二行,s=最后一行10、获取Nginx upstream块内后端IP和端口
# cat aupstream example-servers1 { server 127.0.0.1:80 weight=1 max_fails=2fail_timeout=30s;}upstream example-servers2 { server 127.0.0.1:80 weight=1 max_fails=2fail_timeout=30s; server 127.0.0.1:82 backup;}# awk '/example-servers1/,/}/{if(NR>2){print s}{s=$2}}' a127.0.0.1:80# awk '/example-servers1/,/}/{if(i>1)print s;s=$2;i++}' a# awk '/example-servers1/,/}/{if(i>1){print s}{s=$2;i++}}' a127.0.0.1:80解读:读取第一行,i初始值为0,0>1为假,不执行print s,x=example-servers1,i=1读取第二行,i=1,1>1为假,不执行prints,s=127.0.0.1:80,i=2读取第三行,i=2,2>1为真,执行prints,此时s是上一次s赋值内容127.0.0.1:80,i=3最后一行,执行print s,打印倒数第二行,s=最后一行。这种方式与上面一样,只是用i++作为计数器。以上就是"AWK实用实例有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
字段
下标
文件
统计
一行
方法
数组
内容
次数
知识
篇文章
上一
最大
相同
三个
字符
字符串
三行
存储
循环
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
深圳数应程软件开发有限公司
安徽省暨合肥网络安全展绾
岳阳市启动网络安全宣传
服务器显示400
计算机网络技术大一数学课本
镇江大型软件开发哪家好
北京泰格青川网络技术有限公司
杭州软件开发招聘应届
泰州进口网络技术
吴江区网络安全监察大队
衢州电子网络技术优势
2016的服务器硬盘还能买吗
沧州软件开发工资
徐汇区会计数据库系统价格多少
斗鱼主播都在哪个服务器
流放者柯南提高服务器fps
数据库最小化基本集
网络安全宣传周深圳投票
华为官网网络安全调试
天骐行尸走肉服务器小游戏21
服务器设备管理器在哪里
网络安全展心得
找几个朋友玩网易版服务器
传神翻译软件开发
剧情小说软件开发
好用的ftp服务器
无线路由器拨号失败服务器无响应
方舟转服务器怎么载入存档
魔兽世界数据库3.22
湛江三凡软件开发有限公司