# Assign (Update)

This operator is used to update node values. It can be used in either the:

### plain form: `=`

Which will set the LHS node values equal to the RHS node values. The RHS expression is run against the matching nodes in the pipeline.

### relative form: `|=`

This will do a similar thing to the plain form, but the RHS expression is run with *each LHS node as context*. This is useful for updating values based on old values, e.g. increment.

### Flags

* `c` clobber custom tags

## Create yaml file

Running

```bash
yq --null-input '.a.b = "cat" | .x = "frog"'
```

will output

```yaml
a:
  b: cat
x: frog
```

## Update node to be the child value

Given a sample.yml file of:

```yaml
a:
  b:
    g: foof
```

then

```bash
yq '.a |= .b' sample.yml
```

will output

```yaml
a:
  g: foof
```

## Double elements in an array

Given a sample.yml file of:

```yaml
- 1
- 2
- 3
```

then

```bash
yq '.[] |= . * 2' sample.yml
```

will output

```yaml
- 2
- 4
- 6
```

## Update node from another file

Note this will also work when the second file is a scalar (string/number)

Given a sample.yml file of:

```yaml
a: apples
```

And another sample another.yml file of:

```yaml
b: bob
```

then

```bash
yq eval-all 'select(fileIndex==0).a = select(fileIndex==1) | select(fileIndex==0)' sample.yml another.yml
```

will output

```yaml
a:
  b: bob
```

## Update node to be the sibling value

Given a sample.yml file of:

```yaml
a:
  b: child
b: sibling
```

then

```bash
yq '.a = .b' sample.yml
```

will output

```yaml
a: sibling
b: sibling
```

## Updated multiple paths

Given a sample.yml file of:

```yaml
a: fieldA
b: fieldB
c: fieldC
```

then

```bash
yq '(.a, .c) = "potato"' sample.yml
```

will output

```yaml
a: potato
b: fieldB
c: potato
```

## Update string value

Given a sample.yml file of:

```yaml
a:
  b: apple
```

then

```bash
yq '.a.b = "frog"' sample.yml
```

will output

```yaml
a:
  b: frog
```

## Update string value via |=

Note there is no difference between `=` and `|=` when the RHS is a scalar

Given a sample.yml file of:

```yaml
a:
  b: apple
```

then

```bash
yq '.a.b |= "frog"' sample.yml
```

will output

```yaml
a:
  b: frog
```

## Update deeply selected results

Note that the LHS is wrapped in brackets! This is to ensure we don't first filter out the yaml and then update the snippet.

Given a sample.yml file of:

```yaml
a:
  b: apple
  c: cactus
```

then

```bash
yq '(.a[] | select(. == "apple")) = "frog"' sample.yml
```

will output

```yaml
a:
  b: frog
  c: cactus
```

## Update array values

Given a sample.yml file of:

```yaml
- candy
- apple
- sandy
```

then

```bash
yq '(.[] | select(. == "*andy")) = "bogs"' sample.yml
```

will output

```yaml
- bogs
- apple
- bogs
```

## Update empty object

Given a sample.yml file of:

```yaml
{}
```

then

```bash
yq '.a.b |= "bogs"' sample.yml
```

will output

```yaml
a:
  b: bogs
```

## Update node value that has an anchor

Anchor will remain

Given a sample.yml file of:

```yaml
a: &cool cat
```

then

```bash
yq '.a = "dog"' sample.yml
```

will output

```yaml
a: &cool dog
```

## Update empty object and array

Given a sample.yml file of:

```yaml
{}
```

then

```bash
yq '.a.b.[0] |= "bogs"' sample.yml
```

will output

```yaml
a:
  b:
    - bogs
```

## Custom types are maintained by default

Given a sample.yml file of:

```yaml
a: !cat meow
b: !dog woof
```

then

```bash
yq '.a = .b' sample.yml
```

will output

```yaml
a: !cat woof
b: !dog woof
```

## Custom types: clobber

Use the `c` option to clobber custom tags

Given a sample.yml file of:

```yaml
a: !cat meow
b: !dog woof
```

then

```bash
yq '.a =c .b' sample.yml
```

will output

```yaml
a: !dog woof
b: !dog woof
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mikefarah.gitbook.io/yq/operators/assign-update.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
