yq/pkg/yqlib/doc/operators/add.md

306 lines
3.5 KiB
Markdown
Raw Normal View History

2021-11-03 02:54:09 +00:00
# Add
2020-11-24 02:07:19 +00:00
Add behaves differently according to the type of the LHS:
2021-11-03 02:54:09 +00:00
* arrays: concatenate
* number scalars: arithmetic addition
* string scalars: concatenate
2021-01-11 04:43:50 +00:00
Use `+=` as append assign for things like increment. Note that `.a += .x` is equivalent to running `.a = .a + .x`.
2022-01-22 02:47:22 +00:00
Add is not (yet) supported for maps - however you can use merge `*` which will have a similar effect...
## Concatenate and assign arrays
Given a sample.yml file of:
```yaml
a:
val: thing
b:
- cat
- dog
```
then
```bash
yq eval '.a.b += ["cow"]' sample.yml
```
will output
```yaml
a:
val: thing
b:
- cat
- dog
- cow
```
2020-11-24 02:07:19 +00:00
## Concatenate arrays
Given a sample.yml file of:
```yaml
a:
- 1
- 2
b:
- 3
- 4
```
then
```bash
yq eval '.a + .b' sample.yml
```
will output
```yaml
- 1
- 2
- 3
- 4
```
## Concatenate null to array
Given a sample.yml file of:
```yaml
a:
- 1
- 2
```
then
```bash
yq eval '.a + null' sample.yml
```
will output
```yaml
- 1
- 2
```
2021-01-11 04:52:06 +00:00
## Add new object to array
2020-11-24 02:07:19 +00:00
Given a sample.yml file of:
```yaml
a:
2021-01-11 04:52:06 +00:00
- dog: woof
2020-11-24 02:07:19 +00:00
```
then
```bash
2021-01-11 04:52:06 +00:00
yq eval '.a + {"cat": "meow"}' sample.yml
2020-11-24 02:07:19 +00:00
```
will output
```yaml
2021-01-11 04:52:06 +00:00
- dog: woof
2020-11-24 02:07:19 +00:00
- cat: meow
```
## Add string to array
Given a sample.yml file of:
```yaml
a:
- 1
- 2
```
then
```bash
yq eval '.a + "hello"' sample.yml
```
will output
```yaml
- 1
- 2
- hello
```
## Append to array
2020-11-24 02:07:19 +00:00
Given a sample.yml file of:
```yaml
a:
- 1
- 2
b:
- 3
- 4
```
then
```bash
yq eval '.a = .a + .b' sample.yml
```
will output
```yaml
a:
- 1
- 2
- 3
- 4
b:
- 3
- 4
```
2021-07-07 05:36:43 +00:00
## Append another array using +=
Given a sample.yml file of:
```yaml
a:
- 1
- 2
b:
- 3
- 4
```
then
```bash
yq eval '.a += .b' sample.yml
```
will output
```yaml
a:
- 1
- 2
- 3
- 4
b:
- 3
- 4
```
## Relative append
2021-01-11 04:43:50 +00:00
Given a sample.yml file of:
```yaml
a:
a1:
b:
- cat
a2:
b:
- dog
a3: {}
2021-01-11 04:43:50 +00:00
```
then
```bash
yq eval '.a[].b += ["mouse"]' sample.yml
2021-01-11 04:43:50 +00:00
```
will output
```yaml
a:
a1:
b:
- cat
- mouse
a2:
b:
- dog
- mouse
a3: {b: [mouse]}
2021-01-11 04:43:50 +00:00
```
## String concatenation
2021-01-11 04:43:50 +00:00
Given a sample.yml file of:
```yaml
a: cat
b: meow
```
then
```bash
yq eval '.a = .a + .b' sample.yml
2021-01-11 04:43:50 +00:00
```
will output
```yaml
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:
```yaml
a: 3
b: 4.9
```
then
```bash
yq eval '.a = .a + .b' sample.yml
```
will output
```yaml
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:
```yaml
a: 3
b: 4
```
then
```bash
yq eval '.a = .a + .b' sample.yml
```
will output
```yaml
a: 7
b: 4
```
## Increment numbers
2021-01-11 04:43:50 +00:00
Given a sample.yml file of:
```yaml
a: 3
b: 5
2021-01-11 04:43:50 +00:00
```
then
```bash
yq eval '.[] += 1' sample.yml
2021-01-11 04:43:50 +00:00
```
will output
```yaml
a: 4
b: 6
2021-01-11 04:43:50 +00:00
```
2021-01-18 02:58:46 +00:00
## Add to null
Adding to null simply returns the rhs
Running
```bash
yq eval --null-input 'null + "cat"'
```
will output
```yaml
cat
```
2022-01-22 02:17:16 +00:00
## Custom types: that are really strings
2022-01-22 02:47:22 +00:00
When custom tags are encountered, yq will try to decode the underlying type.
2022-01-22 02:17:16 +00:00
Given a sample.yml file of:
```yaml
a: !horse cat
b: !goat _meow
```
then
```bash
yq eval '.a += .b' sample.yml
```
will output
```yaml
a: !horse cat_meow
b: !goat _meow
```
## Custom types: that are really numbers
2022-01-22 02:47:22 +00:00
When custom tags are encountered, yq will try to decode the underlying type.
2022-01-22 02:17:16 +00:00
Given a sample.yml file of:
```yaml
a: !horse 1.2
b: !goat 2.3
```
then
```bash
yq eval '.a += .b' sample.yml
```
will output
```yaml
a: !horse 3.5
b: !goat 2.3
```