如何用jq将Azure成本管理JSON输出转换为指定表格格式?
解决Azure Cost Management JSON转指定列表格的jq命令
基础TSV格式输出(适合导入工具)
如果需要生成制表符分隔的纯文本表格,直接用以下jq命令:
.properties | ( .columns | map(.name) | index("UsageDate"), index("Cost") ) as [$dateIdx, $costIdx] | [["UsageDate", "Cost"]] + [.rows[] | [.[$dateIdx], .[$costIdx]]] | @tsv
美观对齐的表格格式(适合直接查看)
如果要生成带分隔线、列对齐的可读表格,用这个命令:
.properties | ( .columns | map(.name) | index("UsageDate"), index("Cost") ) as [$dateIdx, $costIdx] | ( [["UsageDate", "Cost"]] + [.rows[] | [.[$dateIdx], .[$costIdx]]] ) as $table | $table | transpose | map(max_by(length) | length) as $widths | $table | map( zip($widths) | map("\(.[0])\( " * ($widths[index(.)] - length) )") | join(" | ") ) | (.[0], (["-" * w for w in $widths] | join("-|-")), .[1:]) | join("\n")
命令说明
- 定位索引:先从
columns中找到"UsageDate"和"Cost"的位置,确保不管字段顺序如何都能准确提取对应数据。 - 构造表格数据:将表头和提取后的行数据组合成结构化的二维数组。
- 格式化输出:要么用
@tsv生成标准可导入的表格格式,要么计算列宽生成对齐的可读表格。
原命令问题说明
你之前用的.properties | (.columns[].name, .rows[])只是将所有列名和行数据平铺输出,没有关联列与对应数据,也没有筛选指定列,所以无法得到结构化的表格。
内容的提问来源于stack exchange,提问作者DevOpsWorld
相关产品推荐
相关产品推荐

