如何在CSV文档中排列多个GCP项目的标签值

4ktjp1zp  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(73)

我这里的问题是,每个项目的标签都不是相同的数字或键。所以,我需要检索我有权访问的每个项目的所有标签,并将其放在CSV文档中。
现在我尝试使用gcloud projects list --format="csv[no-heading](labels)"来获取它们,但正如我所说的,问题是如何在所有项目中获取列名,然后如何将值放置到合适的位置。
上面命令的结果是一个由“;”分隔的key=value列表,我不知道如何正确排列。
我尝试过使用--format="json" | jq -r '.[].labels'并格式化输出,但在如何修复所有项目中的所有键时遇到了同样的问题。
也许我只是累了,应该休息,但任何建议将不胜感激。

h79rfbju

h79rfbju1#

假设这是您想要的以下输入的输出:

输出

"windy-bearing-129522","env","test"
"windy-bearing-129522","version","alpha"
"canvas-syntax-130823","env","test"
"canvas-syntax-130823","version","beta"

字符串

输入

[
  {
    "labels": {
      "env": "test",
      "version": "alpha"
    },
    "projectId": "windy-bearing-129522",
  },
  {
    "labels": {
      "env": "test",
      "version": "beta"
    },
   "projectId": "canvas-syntax-130823"
  }
]

解决方案

这将工作(demo):

jq --raw-output '.[] | { projectId, label : (.labels | to_entries) [] } |
                       [.projectId, .label.key, .label.value ] | @csv   '


可读形式:

.[] | { projectId, label : (.labels | to_entries) [] } 
    | [.projectId, .label.key, .label.value ]  
    | @csv

方法

本质上,第一个过滤器为每个标签创建一个对象,如下所示:

{
  "projectId": "windy-bearing-129522",
  "label": {
    "key": "env",
    "value": "test"
  }
}


第二个过滤器生成以下内容,并将其导入@csv以获得我们需要的格式:

[
  "windy-bearing-129522",
  "env",
  "test"
]


需要注意的几点:

  • 我们使用to_entries函数将每个标签转换为{ key : "some-key", value: "some-value" }形式。
  • label : (.labels | to_entries) []中的[]操作符使同一项目下的多个标签实际上成为单独的对象。
  • --raw-output标志不会转义字符串周围的引号。

相关问题