千家信息网

日志统计中awk常见的运用

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,前言:首先awk是一门语言,其次跟其他语言相比,awk的优势是在文本处理、数值计算等方面,在我们日常的运维工作中,awk还有1个很重要的场景是配合sed、grep的使用,正是因为这些,awk是运维工程
千家信息网最后更新 2025年12月01日日志统计中awk常见的运用

前言首先awk是一门语言,其次跟其他语言相比,awk的优势是在文本处理、数值计算等方面,在我们日常的运维工作中,awk还有1个很重要的场景是配合sed、grep的使用,正是因为这些,awk是运维工程师最常用的工具之一,下面记录一下,awk在日志收集、统计场景的一些最常用的姿势。


awk使用格式

awk [-F value] [-v var=value] 'program text' [files....]
program text:
BEGIN {actions}/pattern/{actions}END{actions}
内置变量
FS--Field Separator:域的分隔符,默认的是以空白符分隔
RS--Record Separator 记录的分隔符,默认是以换行符来分隔
FILENAME -- current filename
NF -- Number of
Feilds in current record,域的个数
NR -- Number of Record 输入的记录数,相当于行号一样,多个文件时会接着递增
FNR -- File Number of Record 输入的当前记录数,每个文件单独计算
$0 -- the whole record 当前整个记录
$n -- the nth field of the current record 当前记录的第n个域


awk常用函数

1、split (string, array, field separator)

2、substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分

3、 length函数返回没有参数的字符串的长度

4、gsub(regular expression, subsitutionstring, target string)



awk扩展使用

awk[options] 'script' FILES
选项
-F:字段分隔符
-v:声明一个变量,FS=:
awk'{print $1 $2}' a.txt:则显示welcometo
awk'{print $1,$2}' a.txt:则显示wlecometo
--------------
内置变量
ORS
OFS
FS
RS
NR
NF
FNR
ARGV:数组,保存命令行本身这个字符串,如awk'{print $0}' a.txt b.txt
这个命令中,ARGV[0]保存awk,ARGV[1]保存a.txt
ARGC:awk命令的参数个数
----------------
printf命令的使用格式
printfformat,item1
要点:
1、其与print命令最大的不同是,printf需要指定format
2、format用于指定后面的每个item的输出格式
3printf语句不会自动打印换行符
format格式的指示符:
%c:显示字符的ASCII
%d,%i十进制的整数
%e,%E科学计数法显示数值
%f:显示浮点数
%g,%G以科学计数法的格式或浮点数的格式显示数值
%s:显示字符串
%u:无符号整数
%%:显示%自身

修饰符:
N:显示宽度
-:左对齐
+:显示数值符号


1,统计squid日志中各个状态码所占的百分比

# cat /usr/local/squid/var/logs/access.log | awk 'BEGIN{print "status code","\t""rate"}{count+=1;a[$9]+=1}END{for(i in a) print i,"\t",a[i]/count*100}' | sort -nk2status code   rate400         0.00412448416         0.00412448478         0.00412448204         0.00618672401         0.02680910   0.0659916301         0.0763028302         0.787775404         2.19628403         2.66441206         5.02567304         17.7043200         71.4339


2,统计squid日志中访问次数前10的域名

]# cat /usr/local/squid/var/logs/access.log | awk 'BEGIN{print "domain","\t","rate"}{count+=1;a[$2]+=1}END{for(i in a){print i,"\t",a[i]}}' | sort -nk2 | tailbsy.pp.starschinalive.com   125js1.pcfg.cache.wpscdn.cn        131portal.wsds.cn      162vas.fun.tv          173img.funshion.com    238www.duba.com        277plugin.video.51togic.com    280p1.meituan.net      286res.qxz.37wan.com   306d.ifengimg.com      481

3,统计最近5分钟的流量

日志:27.156.95.175 uc.a.yximgs.com "p_w_picpath/webp" [25/Dec/2016:22:17:01 +0800] "GET http://uc.a.yximgs.com/upic/2016/11/27/11/BMjAxNjExMjcxMTIxMTNfODY2MTM1NV8xMzAxODgwMDQ4XzJfMw==_low.webp?tag=1-1482675421-f-0-8a7txqz36n-ce40124930229f39 HTTP/1.1" 200

cat /usr/local/squid/var/logs/access.log | awk '{i=int(substr($4,17,2)/5)*5;h=substr($4,14,2);s[h":"i]+=$10;}END{for(i in s)print i,s[i]*8/1024/1024/300"Mbps"}'21:50 143.537Mbps


4,MISS的域名请求数top10统计

# cat /usr/local/squid/var/logs/access.log | awk '{n+=1;if($0~/MISS/)a[$2]+=1}END{for(i in a){print i,a[i],a[i]/n*100}}' | sort -nrk2  | headwww.duba.com 237 0.868291p1.meituan.net 163 0.597179pas.suning.com 66 0.241803shopping.suning.com 55 0.20150277g4l9.com5.z0.glb.qiniucdn.com 55 0.201502res.qxz.37wan.com 50 0.183184review.suning.com 41 0.150211static.1sapp.com 32 0.117238s1.vas.wpscdn.cn 30 0.10991fs.ios.kugou.com 25 0.0915919


格式 统计 命令 字符 日志 字符串 数值 分隔符 变量 常用 个数 函数 参数 场景 域名 换行符 整数 文件 点数 科学 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 滨州电信软件开发 江苏通用软件开发厂家价格 河南金税盘安全服务器地址 苹果软件开发工程师怎么样 数据库日记文件很大 北京通勤人员数据库上传 甘肃移动网络技术岗待遇 九某互联网科技有限公司 创建新的access数据库后 网络安全进校园我们一直在行动 新乡医学院网络安全 年货清单软件开发 专门用于数据存储的服务器报价 测试过程中使用数据库的场景 登录银行密码使用数据网络安全吗 应用软件开发方向介绍 有关网络安全的征文500字 软件开发需要什么指法 数据库删除命令只能是一个表么 网络安全奖学金2020 e7级服务器cpu 写入数据库表的测试设计 网络管理服务器品牌 贵阳升腾网络技术怎么样 四级网络技术是什么级别的 在哪里学习网络技术工程师 ibm服务器机柜轮子拆卸 lol服务器维护最新 微博国际版服务器 数据库删除命令只能是一个表么
0