Having the following file structure:
A1:
B1:
description: "B1 field"
B2:
any-field: 1
description: "B2 field"
A2:
B3:
any-field: 1
B4:
any-field: 1
description: "B4 field"
I would like to get the following result:
B1: "B1 field"
B2: "B2 field"
B4: "B4 field"
So basically I need to filter out object without desired property (B3
in this case) and then map each from .*.* | keys
to .*.*.description
, but I failed to do it.
yq
I am using is the newest (4.27.5) from https://github.com/mikefarah/yq
To go 2-levels deep, you can use the to_entries
function twice, and then select the key name and the value containing the .description
field
yq 'to_entries | .[].value | to_entries |
map(select(.value | has("description"))) | .[] | {.key: .value.description}' yaml