Date created: Monday, July 17, 2023 12:01:03 PM. Last modified: Wednesday, October 15, 2025 12:02:30 PM
'yq' - Notes
Ubuntu Setup:
snap install yq
Output multiple fields:
$ yq '.foo.name, .foo.platform' r1-pop1.yaml
r1-pop1
eos
Filter for fields with a specific value:
$ yq '.name, .platform|select(.platform == "eos")' *.yaml
r1-pop1
---
r2-pop1
---
r1-pop2
---
r2-pop2
---
Remove the YAML header:
$ yq -N '.name, .platform|select(.platform == "eos")' *.yaml
r1-pop1
r2-pop1
r1-pop2
r2-pop2
yq doesn't have if else support right now. One can chain select statements instead (to exclude lab devices and inactive devices):
$ yq -N '.[] | select(.name != "r*-lab") | select(.platform == "eos") | select(.status == "active") | .name'
Output fields from different points in the hierarchy, and use filtering:
$ yq '"\(.foo.name):", .foo.interfaces[] | select(.name == "Loopback0" or .name == "Loopback2") | " \(.name):\n\(.ip_addresses)"' inventory/host_vars/r*-*-*.yaml
r1-pop1:
Loopback0:
- address: fe80::3a/128
- address: 10.0.0.58/32
Loopback2:
- address: fe80:0:0:1::3a/128
- address: 10.0.0.186/32
r1-pop2:
Loopback0:
- address: fe80::3b/128
- address: 10.0.0.59/32
Loopback2:
- address: fe80:0:0:1::3b/128
- address: 100.0.187/32
Previous page: 'yt-dlp' - Notes
Next page: Bond Interface