yq/pkg/yqlib/doc/Variable Operators.md
2021-09-12 21:52:02 +10:00

1.7 KiB

Like the jq equivalents, variables are sometimes required for the more complex expressions (or swapping values between fields).

Note that there is also an additional ref operator that holds a reference (instead of a copy) of the path, allowing you to make multiple changes to the same path.

Single value variable

Given a sample.yml file of:

a: cat

then

yq eval '.a as $foo | $foo' sample.yml

will output

cat

Multi value variable

Given a sample.yml file of:

- cat
- dog

then

yq eval '.[] as $foo | $foo' sample.yml

will output

cat
dog

Using variables as a lookup

Example taken from jq

Given a sample.yml file of:

"posts":
  - "title": Frist psot
    "author": anon
  - "title": A well-written article
    "author": person1
"realnames":
  "anon": Anonymous Coward
  "person1": Person McPherson

then

yq eval '.realnames as $names | .posts[] | {"title":.title, "author": $names[.author]}' sample.yml

will output

title: Frist psot
author: Anonymous Coward
title: A well-written article
author: Person McPherson

Using variables to swap values

Given a sample.yml file of:

a: a_value
b: b_value

then

yq eval '.a as $x  | .b as $y | .b = $x | .a = $y' sample.yml

will output

a: b_value
b: a_value

Use ref to reference a path repeatedly

Note: You may find the with operator more useful.

Given a sample.yml file of:

a:
  b: thing
  c: something

then

yq eval '.a.b ref $x | $x = "new" | $x style="double"' sample.yml

will output

a:
  b: "new"
  c: something