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

如何用jq分离混合JSON与非JSON格式的日志文件?

混合日志拆分方案

命令实现

使用tee结合jq实现日志分流,以下命令可准确将混合日志拆分为纯JSON日志与纯非JSON日志:

cat "$logfile" | tee >(jq -R 'fromjson? | select(type == "object")' > "$json_log_file") >(jq -R 'select(fromjson? | type != "object")' > "$plain_log_file") > /dev/null

命令说明

  • tee >(...) >(...):将输入日志同时分发到两个jq处理进程
  • 第一个jq分支(提取JSON日志):
    • -R:以原始字符串格式读取每行日志
    • fromjson?:尝试将字符串解析为JSON,解析失败则返回null
    • select(type == "object"):仅保留解析成功的JSON对象行,写入JSON日志文件
  • 第二个jq分支(提取非JSON日志):
    • select(fromjson? | type != "object"):筛选出无法解析为JSON对象的行(包括非JSON文本、解析为字符串/数字等非对象的JSON值),保留原始内容写入纯文本日志文件
  • > /dev/null:避免原始日志内容输出到终端

注意事项

  • 需确保jq版本≥1.5,fromjson?语法在该版本及以上支持
  • 若日志包含多行JSON(单条日志跨多行),上述命令无法正确处理,需额外结合jq --slurp或其他工具预处理
  • 拆分后的文件可直接用lnav打开查看:lnav "$json_log_file" 或 lnav "$plain_log_file"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:15:37