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

Shell环境使用jq处理日志转JSON报语法错误如何解决

问题根因

你遇到的是典型的jq表达式语法错误,从报错日志可以看到,jq实际解析到的表达式中,description:.[3]和timeWindow:.[4]两个键值对之间缺失了逗号,导致jq无法识别对象结构。
如果你的原始命令中已经写了逗号,那就是Shell引号传递问题:部分环境下单引号包裹的内容会被异常截断,导致逗号丢失。

修复方案

Linux/macOS 环境可直接运行命令

读取本地日志文件版本

cat 你的日志文件路径 | jq -R 'split("?") | {
  deviceName: .[0],
  ProcessId: (.[1] | tonumber),
  processName: .[2],
  description: .[3],
  timeWindow: .[4],
  numberOfOccurrence: (.[5] | tonumber)
}'

从变量读取输入版本

echo "$input" | jq -R 'split("?") | {
  deviceName: .[0],
  ProcessId: (.[1] | tonumber),
  processName: .[2],
  description: .[3],
  timeWindow: .[4],
  numberOfOccurrence: (.[5] | tonumber)
}'

可选优化说明

上面的命令额外加了tonumber转换,会把进程ID和发生次数字段从字符串转为数值类型,如果你需要保留字符串格式,去掉( | tonumber)部分即可。

Windows CMD 环境适配

如果是Windows cmd环境运行,需要把外层单引号换成双引号,内部双引号用反斜杠转义:

type 你的日志文件路径 | jq -R "split(\"?\") | { deviceName: .[0], ProcessId: .[1], processName: .[2], description: .[3], timeWindow: .[4], numberOfOccurrence: .[5] }"

运行效果示例

处理第一行日志后输出结果如下:

{
  "deviceName": "BBAOMACBOOKAIR2",
  "ProcessId": 976,
  "processName": "AMPDeviceDiscoveryAgent[976]:",
  "description": "      - Can't handle disconnect with invalid ecid",
  "timeWindow": "0700-0800",
  "numberOfOccurrence": 8
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:45:02