I'm using Bash and YQ to do some YAML parsing. My input is a simple object that contains two array properties. I would like to explode both arrays so my simple object is converted into an array of objects.
Consider the following YAML:
name: a
spaces:
- alpha
- beta
envs:
- dev
- test
- prod
Now I would like to "explode" both arrays so I get multiple objects:
- name: a
space: alpha
env: dev
- name: a
space: alpha
env: test
- name: a
space: alpha
env: prod
- name: a
space: beta
env: dev
- name: a
space: beta
env: test
- name: a
space: beta
env: prod
How can I do this with YQ?
Just iterate over the arrays using []
, create your final objects using {…}
, and wrap everthing in array brackets […]
again:
yq '[{"name": .name, "space": .spaces[], "env": .envs[]}]' file.yaml
- name: a
space: alpha
env: dev
- name: a
space: alpha
env: test
- name: a
space: alpha
env: prod
- name: a
space: beta
env: dev
- name: a
space: beta
env: test
- name: a
space: beta
env: prod