Yaml YQ -如何使用[],但仍然打印迭代器引用的键



我有一个yaml文件,看起来像这样:

---
component1:
tests:
- name: test1
type: manual
- name: test2
type: automated
- name: test3
type: manual
- name: test4
type: automated
- name: test5
type: manual
- name: test6
type: automated
component2:
tests:
- name: test1
type: manual
- name: test2
type: automated
- name: test3
type: manual
- name: test4
type: automated
- name: test5
type: manual
- name: test6
type: automated

我试图只列出自动化测试,但保留有关测试所在组件的信息。

我希望输出类似如下:

component1:
tests:
- name: test2
type: automated
- name: test4
type: automated
- name: test6
type: automated
component2:
tests:
- name: test2
type: automated
- name: test4
type: automated
- name: test6
type: automated

但是我也会接受任何允许我按组件对自动化测试进行分组的答案。

我已经尝试过yq e '.[].tests | map(select(.type == "automated"))' file.yaml -P,但这只是给了我以下输出和组件信息丢失,我只是得到以下输出:

- name: test2
type: automated
- name: test4
type: automated
- name: test6
type: automated
- name: test2
type: automated
- name: test4
type: automated
- name: test6
type: automated

假设您正在使用mikefarah/yq,您可以使用|=的更新选择操作符将结果更新回tests列表

yq e '.[].tests |= map(select(.type == "automated"))' file.yaml -P

请注意,如果您使用的是4.18.1以上的yq版本,则eval操作e是默认操作,可以完全跳过。

最新更新