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

如何用jq为compile_commands.json生成含唯一编译统计的分析结果

解决jq处理compile_commands.json提取唯一编译标志的问题

先给你直接能用的实现方案,再拆解思路:

核心实现代码

假设你已经完成了按文件分组的逻辑(把相同文件的编译命令聚合到commands数组),直接在分组结果后追加唯一标志的计算逻辑即可:

# 先按文件分组,筛选出重复编译的文件
.group_by(.file)[]
| select(length > 1)
# 构造输出结构,加入唯一标志计算
| {
    file: .[0].file,
    commands: .,
    # 提取所有命令的flags,扁平化后去重得到唯一标志列表
    uniqueFlags: [.[].flags] | flatten | unique,
    # 计算唯一标志的数量
    uniqueFlagCnt: ([.[].flags] | flatten | unique | length)
  }

关键思路拆解

  1. 正确提取所有flags:[.[].flags]会把分组后每个编译条目的flags数组收集成一个二维数组,比如[[flag1, flag2], [flag2, flag3]]。
  2. 扁平化数组:用flatten把二维数组转成一维,变成[flag1, flag2, flag2, flag3],方便后续去重。
  3. 去重与计数:unique去重得到唯一标志列表,再用length获取数量。

常见问题修正

如果之前用foreach出错,大概率是没处理好数组的层级关系——foreach适合遍历单条数据,而这里需要批量处理所有flags,用数组推导+内置函数更直接。

另外,如果你的flags不是预先解析好的数组,而是从command字段里的字符串拆分出来的,可以把.[].flags替换成.[].command | split(" ") | map(select(test("^-"))),只提取以-开头的编译标志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:17:18