yq/pkg/yqlib/doc/Add.md
2021-02-11 10:58:40 +11:00

2.5 KiB

Add behaves differently according to the type of the LHS:

  • arrays: concatenate
  • number scalars: arithmetic addition
  • string scalars: concatenate

Use += as append assign for things like increment. Note that .a += .x is equivalent to running .a = .a + .x.

Concatenate and assign arrays

Given a sample.yml file of:

a:
  val: thing
  b:
    - cat
    - dog

then

yq eval '.a.b += ["cow"]' sample.yml

will output

a:
  val: thing
  b:
    - cat
    - dog
    - cow

Concatenate arrays

Given a sample.yml file of:

a:
  - 1
  - 2
b:
  - 3
  - 4

then

yq eval '.a + .b' sample.yml

will output

- 1
- 2
- 3
- 4

Concatenate null to array

Given a sample.yml file of:

a:
  - 1
  - 2

then

yq eval '.a + null' sample.yml

will output

- 1
- 2

Add new object to array

Given a sample.yml file of:

a:
  - dog: woof

then

yq eval '.a + {"cat": "meow"}' sample.yml

will output

- dog: woof
- cat: meow

Add string to array

Given a sample.yml file of:

a:
  - 1
  - 2

then

yq eval '.a + "hello"' sample.yml

will output

- 1
- 2
- hello

Update array (append)

Given a sample.yml file of:

a:
  - 1
  - 2
b:
  - 3
  - 4

then

yq eval '.a = .a + .b' sample.yml

will output

a:
  - 1
  - 2
  - 3
  - 4
b:
  - 3
  - 4

String concatenation

Given a sample.yml file of:

a: cat
b: meow

then

yq eval '.a = .a + .b' sample.yml

will output

a: catmeow
b: meow

Relative string concatenation

Given a sample.yml file of:

a: cat
b: meow

then

yq eval '.a += .b' sample.yml

will output

a: catmeow
b: meow

Number addition - float

If the lhs or rhs are floats then the expression will be calculated with floats.

Given a sample.yml file of:

a: 3
b: 4.9

then

yq eval '.a = .a + .b' sample.yml

will output

a: 7.9
b: 4.9

Number addition - int

If both the lhs and rhs are ints then the expression will be calculated with ints.

Given a sample.yml file of:

a: 3
b: 4

then

yq eval '.a = .a + .b' sample.yml

will output

a: 7
b: 4

Increment number

Given a sample.yml file of:

a: 3

then

yq eval '.a += 1' sample.yml

will output

a: 4

Add to null

Adding to null simply returns the rhs

Running

yq eval --null-input 'null + "cat"'

will output

cat