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

如何将awk日志统计逻辑迁移为适配JSON日志的jq单行命令

可直接运行的jq处理单行命令
jq -s 'reduce .[] as $item ({}; $key = "\($item["id.orig_h"])\t\($item["id.resp_h"])\t\($item["id.resp_p"]); .[$key].count += 1 | .[$key].total_duration += ($item.duration // 0)) | to_entries | sort_by(-.value.total_duration) | first | .key / "\t" as $addr | "\($addr[0]) | \($addr[1]) | \(.value.total_duration / 3600 | . * 10000 | floor / 10000)"' 你的日志文件路径.json

如果是从管道读取日志流(比如和其他日志采集命令配合),直接去掉命令末尾的文件路径即可,示例:

cat 你的日志文件.json | jq -s 'reduce .[] as $item ({}; $key = "\($item["id.orig_h"])\t\($item["id.resp_h"])\t\($item["id.resp_p"]); .[$key].count += 1 | .[$key].total_duration += ($item.duration // 0)) | to_entries | sort_by(-.value.total_duration) | first | .key / "\t" as $addr | "\($addr[0]) | \($addr[1]) | \(.value.total_duration / 3600 | . * 10000 | floor / 10000)"'
逻辑对应说明(和原awk功能完全对齐)
  • 分组统计逻辑:对应原awk中arr[$1 FS $2] += $3; count[$1 FS $2] +=1部分,按源IP、目的IP、目的端口三个字段作为唯一分组标识,累加每个分组的总连接时长、连接次数
  • 排序取最高逻辑:对应原awk后接的sort -nrk4 | head -1部分,按分组总时长倒序排序,取总时长最高的第一条记录
  • 格式化输出逻辑:对应最后接的awk格式化命令,将总时长从秒转换为小时,默认保留4位小数,按「源IP | 目的IP | 累计时长小时数」格式输出
常见调整说明
  • 如果需要调整小数保留位数:修改命令末尾的10000即可,比如要保留6位小数就改为1000000
  • 如果需要输出所有分组的统计结果:删除命令中的| first即可
  • 如果日志存在缺失duration字段的情况:命令中已经用($item.duration // 0)做了兼容,缺失时长的记录会按0计算不报错

内容的提问来源于stack exchange,提问作者net_solv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:15:00