mogoman
mogoman

Reputation: 2298

yq v4 get root keys based on existence of deeper keys

I have this structure:

foo:
  image: 123

bar:
  image: 456

baz:
  config: "my config"

and I'd like to print the root keys (i.e. foo, bar, baz) based on the existence of the child "image"

In yq version 3 I could do this:

$ yq read test.yaml --printMode p "*.image" | awk -F'.' '{print $1}'
foo
bar

But I can't find the equivalent in v4. The yq + jq solution would be:

$ yq -j e test.yaml | jq -r 'to_entries[] | select(.value | has("image")) | [.key][]' 
foo
bar

Any idea how to do this with yq v4?

Upvotes: 1

Views: 1306

Answers (1)

Inian
Inian

Reputation: 85780

You can use the path operator to get the path of the matching object containing the tag image

yq e '.[] | select(has("image")) | path | .[]' yaml

Upvotes: 1

Related Questions