yq/pkg/yqlib/doc/variable-operators.md
2021-11-03 22:37:07 +11:00

1.7 KiB

Variable Operators

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