如何将标签结构不一致的多个GCP项目标签整理到CSV文档
导出GCP多项目标签到规范CSV的解决方案
步骤1:获取包含项目信息与标签的完整JSON数据
首先导出所有有权访问的项目的基础信息(项目ID、名称)及标签,确保后续能关联项目与标签:
gcloud projects list --format="json(projectId, name, labels)"
步骤2:提取所有唯一的标签键作为CSV表头
通过jq收集所有项目的标签键,去重后整理成CSV格式的表头:
# 提取并去重所有标签键,保存到临时文件 gcloud projects list --format="json(labels)" | jq -r '.[].labels | keys[]' | sort | uniq > tag_keys.txt # 将标签键拼接为逗号分隔的表头字符串 HEADERS=$(paste -sd "," tag_keys.txt)
步骤3:生成统一列名的规范CSV
结合jq的数组处理能力,将每个项目的标签值对应到表头列,无对应标签的列填充为空字符串:
# 先写入CSV表头(包含项目ID、名称及所有标签键) echo "projectId,name,$HEADERS" > projects_tags.csv # 处理每个项目数据,填充对应标签值并追加到CSV gcloud projects list --format="json(projectId, name, labels)" | jq -r '.[] | [.projectId, .name] + [$HEADERS | split(",")[] as $key | .labels[$key] // ""] | @csv' >> projects_tags.csv
关键说明
- 用
projectId作为项目唯一标识,比名称更可靠,避免重名项目混淆。 // ""是jq的空值处理语法,当标签键不存在时自动填充空字符串,保证CSV格式规范。- 若不需要临时文件
tag_keys.txt,可以合并命令,直接通过管道传递标签键:
HEADERS=$(gcloud projects list --format="json(labels)" | jq -r '.[].labels | keys[]' | sort | uniq | paste -sd ",") echo "projectId,name,$HEADERS" > projects_tags.csv gcloud projects list --format="json(projectId, name, labels)" | jq -r '.[] | [.projectId, .name] + [$HEADERS | split(",")[] as $key | .labels[$key] // ""] | @csv' >> projects_tags.csv
内容的提问来源于stack exchange,提问作者JuanToroMarty
相关产品推荐
相关产品推荐

