SuperAPI AI 工具集

jq-yq

数据与分析

查看项目

更新于 10-15 07:47

技能介绍

用途

jq 与 yq 是命令行下处理结构化数据的两个工具。jq 面向 JSON,yq 面向 YAML,同时可在多种格式之间转换。它们常用于 Shell 脚本、CI 流程和运维场景中解析、转换、过滤、提取结构化数据。

jq 的主要能力

  • 取值:字段、嵌套字段、数组元素、多字段构造;可选字段访问 .b? 在字段缺失时不报错。
  • 数组操作:迭代 .[]、过滤 select、映射 map、length、first、flatten、切片。
  • 对象数组:提取、过滤、排序、按字段分组 group_by、去重 unique_by、min_by/max_by。
  • 对象构造与解构:用字符串插值构建新对象、增删改名、to_entries/from_entries、with_entries。
  • 字符串处理:插值输出、join/split、正则 test/capture。
  • 条件与空值:if-then-else、// 取默认值、try-catch、any/all。
  • 聚合:add、reduce、分组聚合统计。
  • 递归查找:.. 配合 .name?、strings、numbers 在任意深度查找。
  • 输出与编码:-r 原始输出、-c 紧凑输出、-s 聚合为数组、-R 原始输入、-n 无输入生成、@tsv/@csv/@uri。
  • CSV/TSV 转换:JSON 数组转带表头 CSV,CSV 逐行转 JSON。
  • 环境变量:--arg、--argjson、env 读取。

yq 的主要能力

  • 读写与原地编辑:取值、-i 原地修改、设置/删除字段、列出键。
  • 选择与过滤:select、has、按字段判断、提取容器镜像等嵌套路径。
  • 合并:用 ea 进行深合并(后者覆盖前者),或把多文档合并为一个。
  • 格式转换:-o=json、-P(JSON 转 YAML)、-o=xml、-o=props。
  • 多文档:按 documentIndex 选择、批量修改、统计文档数。

使用方式

两个工具都可直接以命令管道方式使用,也可写入脚本。jq 的典型调用形式为 echo '<json>' | jq '<filter>',yq 为 yq '<filter>' file.yaml。jq 的原地修改需借助临时文件或 sponge,yq 提供 -i 原地修改。

适用场景

资料给出的实际管道包括:用 curl 获取 API 响应后提取字段、分页收集、格式化为表格;解析 JSON 日志行并筛选错误、聚合日志级别;修改 package.json 版本、合并基础与覆盖配置、批量更新依赖;结合 kubectl 查询 Pod 名称与状态、修改 Deployment 副本数;对大文件使用 --stream、截断流、NDJSON 逐行处理、排序后比较两个大 JSON。

限制

yq -o=json、-o=xml、-o=props 等具体输出格式的支持范围与所用 yq 实现相关,资料未说明版本要求。jq 的原地修改没有内建标志,需外部命令配合。性能部分仅给出流式处理思路,未提供具体基准数据。