You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据日志前一行匹配模式统计对应HTTP状态码的行数

用awk实现成对日志的状态码统计

没问题,这个需求用awk来处理最合适不过了——它天生擅长处理这种跨行关联的文本逻辑。这里给你一个直接可用的命令,完美匹配你的需求:

NR%2==1 { if ($0 ~ /UA-1234567-3|UA-1234567-4/) { flag=1; next } else { flag=0 } }
NR%2==0 && flag==1 { code=$1; count[code]++ }
END { for (c in count) print c ": " count[c] }

命令逻辑解释

  • 第一行:处理奇数行(也就是请求行)。如果当前行包含UA-1234567-3或UA-1234567-4,就设置标记flag=1并跳过下一行处理;否则标记flag=0,忽略对应的响应行。
  • 第二行:处理偶数行(响应行),只有当之前的请求行匹配目标UA(flag=1)时,才提取响应行的第一个字段(也就是HTTP状态码),并在count数组中累加计数。
  • 第三行:所有日志处理完成后,遍历count数组,输出每个状态码及其出现次数。

简化优化版

如果你的目标UA是连续的编号(比如3和4),可以用正则表达式简化匹配规则,让命令更简洁:

NR%2==1 { flag=($0 ~ /UA-1234567-[34]/) ? 1 : 0; next }
NR%2==0 && flag { count[$1]++ }
END { for (c in count) print c ": " count[c] }

注意事项

  • 假设你的HTTP状态码是响应行的第一个字段,如果实际日志中状态码位置不同(比如第二个字段),只需要把$1改成对应位置的$n即可。
  • 如果需要区分不同UA对应的状态码,可以修改逻辑,比如用count[ua, code]这样的多维数组来统计,不过你的需求里是合并统计两个UA的结果,所以当前命令足够。

举个例子,假设你的日志内容如下:

GET /api/v1/user UA-1234567-3
200 OK
POST /api/v1/login UA-1234567-5
400 Bad Request
GET /api/v1/data UA-1234567-4
500 Internal Server Error
GET /api/v1/info UA-1234567-3
200 OK

运行命令后会输出:

200: 2
500: 1

内容的提问来源于stack exchange,提问作者Dmitry S. Karasev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:25:24