如何用awk对切割后的日志进行分析统计

风辰小哥_4355

风辰小哥_4355

2026-09-10

595人浏览

原创

nginx默认日志中$1是ip、$9是状态码,但因time_local含空格易致字段错位,应优先用双引号分隔或match()提取;统计ip频次须用awk哈希计数而非uniq -c;匹配状态码需锚定^$避免误判;按小时切分时间字段需正确转义正则中的方括号。

如何用awk对切割后的日志进行分析统计

怎么用 awk 提取 Nginx 日志里的 IP 和状态码

直接按空格切分,$1 是客户端 IP,$9 是 HTTP 状态码——但前提是日志格式没被自定义过。Nginx 默认 access log 的字段顺序是固定的:remote_addr - remote_user [time_local] "request" status bytes ...,所以 $1$9 大概率可用。

常见错误是默认空格分隔时,[time_local] 里带空格(比如 [08/Sep/2026:10:36:00 +0800])会导致字段错位。这时不能硬靠 $9,得先用正则或 split() 定位。

  • 稳妥做法:用双引号作为边界提取 "request" 和状态码,例如 awk -F'"' '{print $1,$3}' access.log | awk '{print $1,$(NF-1)}'
  • 更稳做法:用 match() 配合 substr() 直接从整行匹配状态码,避免字段漂移
  • 如果改过 log_format,必须先确认实际字段位置,用 head -1 access.log | tr ' ' ' ' | nl 数列

统计访问最多的 IP 为什么用 count[$1]++ 而不用 uniq -c

因为 uniq -c 只能处理已排序的连续重复行,而原始日志里同一 IP 的请求是散列的;awk '{count[$1]++} END{...}' 是哈希计数,不依赖顺序,准确且一次到位。

性能上,awk 内存计数比 sort | uniq 少一次磁盘 I/O 和大内存排序,100 万行日志快 3–5 倍。

琅琅配音
琅琅配音

一款AI音频处理工具,主要用于全能AI配音神器,适合需要提升相关任务效率的用户。

下载
  • 错误写法:awk '{print $1}' access.log | sort | uniq -c | sort -nr —— 多余的管道和排序
  • 正确写法:awk '{count[$1]++} END{for (ip in count) print count[ip], ip}' access.log | sort -nr | head -20
  • 注意:for (ip in count) 遍历顺序不确定,必须靠 sort 排序,不能省

awk 统计 404/502 错误时,$9 ~ /^(404|502)$/grep 更准在哪

grep "404|502" 会把 24045021、甚至 URL 中的 404 都抓出来;而 $9 ~ /^(404|502)$/ 明确限定只匹配第 9 字段、且必须是完整值,不会误伤。

  • 典型误判:awk '$9 ~ /404/' → 匹配 40401404,应加锚点 ^$
  • 更安全写法:awk '$9 == "404" || $9 == "502" {print $1, $7, $9}' access.log,用等值判断彻底规避正则歧义
  • 如果日志里状态码后带短横(如 "502-" ),需先 gsub(/[- ]/, "", $9) 清洗

按小时切分日志再分别统计,split($4, a, "[\[/:]") 怎么写才不报错

Nginx 时间字段形如 [08/Sep/2026:10:36:00 +0800],要取小时得先拆掉方括号和分隔符。split() 第二个参数是数组名,第三个是正则分隔符,方括号在正则里有特殊含义,必须转义。

错误写法:split($4, a, "[/:]") —— 没处理开头的 [,导致 a[1] 是空字符串;更糟的是 [ 在正则里表示字符组,不转义会语法错误。

  • 正确写法:split($4, a, "[\[/:]"),两个反斜杠是因为 shell 和 awk 各吃一个
  • 然后小时在 a[4](即 08/Sep/2026:10 拆成 "08", "Sep", "2026", "10"
  • 生产环境建议加 if (length(a) >= 4) 判断,防空字段崩溃

真正麻烦的不是语法,而是日志格式一致性——只要有一行 log_format 不对齐,整个 awk 统计就偏。上线前务必用 head -50tail -50 对照字段位置,别信“默认应该一样”。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

2026.09.20

0

13

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

2026.09.20

0

15

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

160

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

60

10

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

2026.09.16

80

23

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

2026.09.16

60

25

Pandas数据读取导入与文件导出处理
Pandas数据读取导入与文件导出处理

本专题整理Pandas读取CSV、Excel、JSON、SQL、Parquet等文件的方法,以及to_csv、to_excel、to_sql和to_parquet等常用数据导出流程。

2026.09.16

40

27

GDB怎么设置断点
GDB怎么设置断点

本专题介绍GDB按照函数名、源代码行号和文件位置设置断点的方法,详细说明run、continue、next、step等命令的配合使用,帮助定位程序崩溃、逻辑异常及代码未按预期执行的问题。

2026.09.11

380

28

GDB怎么查看变量值
GDB怎么查看变量值

本专题介绍GDB调试过程中查看变量值的具体方法,涵盖局部变量、函数参数、数组、结构体和指针内容查询,同时整理变量持续显示、格式化输出及无法读取变量时的排查思路。

2026.09.11

120

22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观Linux入门视频教程
尚观Linux入门视频教程

共22课时 | 5.3万人学习

尚观Linux初级视频教程
尚观Linux初级视频教程

共21课时 | 4.9万人学习

Linux入门级实战课程
Linux入门级实战课程

共10课时 | 1.5万人学习