2021-12-04 02:54:12 +00:00
|
|
|
# Sort
|
|
|
|
|
2021-12-04 23:53:37 +00:00
|
|
|
Sorts an array. Use `sort` to sort an array as is, or `sort_by(exp)` to sort by a particular expression (e.g. subfield).
|
2021-12-04 02:54:12 +00:00
|
|
|
|
|
|
|
Note that at this stage, `yq` only sorts scalar fields.
|
|
|
|
|
2022-02-06 03:39:46 +00:00
|
|
|
{% hint style="warning" %}
|
|
|
|
Note that versions prior to 4.18 require the 'eval/e' command to be specified. 
|
|
|
|
|
|
|
|
`yq e <exp> <file>`
|
|
|
|
{% endhint %}
|
|
|
|
|
2021-12-04 02:54:12 +00:00
|
|
|
## Sort by string field
|
|
|
|
Given a sample.yml file of:
|
|
|
|
```yaml
|
|
|
|
- a: banana
|
|
|
|
- a: cat
|
|
|
|
- a: apple
|
|
|
|
```
|
|
|
|
then
|
|
|
|
```bash
|
2022-01-27 06:21:10 +00:00
|
|
|
yq 'sort_by(.a)' sample.yml
|
2021-12-04 02:54:12 +00:00
|
|
|
```
|
|
|
|
will output
|
|
|
|
```yaml
|
|
|
|
- a: apple
|
|
|
|
- a: banana
|
|
|
|
- a: cat
|
|
|
|
```
|
|
|
|
|
2021-12-04 23:53:37 +00:00
|
|
|
## Sort array in place
|
|
|
|
Given a sample.yml file of:
|
|
|
|
```yaml
|
|
|
|
cool:
|
|
|
|
- a: banana
|
|
|
|
- a: cat
|
|
|
|
- a: apple
|
|
|
|
```
|
|
|
|
then
|
|
|
|
```bash
|
2022-01-27 06:21:10 +00:00
|
|
|
yq '.cool |= sort_by(.a)' sample.yml
|
2021-12-04 23:53:37 +00:00
|
|
|
```
|
|
|
|
will output
|
|
|
|
```yaml
|
|
|
|
cool:
|
|
|
|
- a: apple
|
|
|
|
- a: banana
|
|
|
|
- a: cat
|
|
|
|
```
|
|
|
|
|
|
|
|
## Sort array of objects by key
|
|
|
|
Note that you can give sort_by complex expressions, not just paths
|
|
|
|
|
|
|
|
Given a sample.yml file of:
|
|
|
|
```yaml
|
|
|
|
cool:
|
|
|
|
- b: banana
|
|
|
|
- a: banana
|
|
|
|
- c: banana
|
|
|
|
```
|
|
|
|
then
|
|
|
|
```bash
|
2022-01-27 06:21:10 +00:00
|
|
|
yq '.cool |= sort_by(keys | .[0])' sample.yml
|
2021-12-04 23:53:37 +00:00
|
|
|
```
|
|
|
|
will output
|
|
|
|
```yaml
|
|
|
|
cool:
|
|
|
|
- a: banana
|
|
|
|
- b: banana
|
|
|
|
- c: banana
|
|
|
|
```
|
|
|
|
|
2021-12-04 02:54:12 +00:00
|
|
|
## Sort is stable
|
|
|
|
Note the order of the elements in unchanged when equal in sorting.
|
|
|
|
|
|
|
|
Given a sample.yml file of:
|
|
|
|
```yaml
|
|
|
|
- a: banana
|
|
|
|
b: 1
|
|
|
|
- a: banana
|
|
|
|
b: 2
|
|
|
|
- a: banana
|
|
|
|
b: 3
|
|
|
|
- a: banana
|
|
|
|
b: 4
|
|
|
|
```
|
|
|
|
then
|
|
|
|
```bash
|
2022-01-27 06:21:10 +00:00
|
|
|
yq 'sort_by(.a)' sample.yml
|
2021-12-04 02:54:12 +00:00
|
|
|
```
|
|
|
|
will output
|
|
|
|
```yaml
|
|
|
|
- a: banana
|
|
|
|
b: 1
|
|
|
|
- a: banana
|
|
|
|
b: 2
|
|
|
|
- a: banana
|
|
|
|
b: 3
|
|
|
|
- a: banana
|
|
|
|
b: 4
|
|
|
|
```
|
|
|
|
|
|
|
|
## Sort by numeric field
|
|
|
|
Given a sample.yml file of:
|
|
|
|
```yaml
|
|
|
|
- a: 10
|
|
|
|
- a: 100
|
|
|
|
- a: 1
|
|
|
|
```
|
|
|
|
then
|
|
|
|
```bash
|
2022-01-27 06:21:10 +00:00
|
|
|
yq 'sort_by(.a)' sample.yml
|
2021-12-04 02:54:12 +00:00
|
|
|
```
|
|
|
|
will output
|
|
|
|
```yaml
|
|
|
|
- a: 1
|
|
|
|
- a: 10
|
|
|
|
- a: 100
|
|
|
|
```
|
|
|
|
|
|
|
|
## Sort, nulls come first
|
|
|
|
Given a sample.yml file of:
|
|
|
|
```yaml
|
|
|
|
- 8
|
|
|
|
- 3
|
|
|
|
- null
|
|
|
|
- 6
|
|
|
|
- true
|
|
|
|
- false
|
|
|
|
- cat
|
|
|
|
```
|
|
|
|
then
|
|
|
|
```bash
|
2022-01-27 06:21:10 +00:00
|
|
|
yq 'sort' sample.yml
|
2021-12-04 02:54:12 +00:00
|
|
|
```
|
|
|
|
will output
|
|
|
|
```yaml
|
|
|
|
- null
|
|
|
|
- false
|
|
|
|
- true
|
|
|
|
- 3
|
|
|
|
- 6
|
|
|
|
- 8
|
|
|
|
- cat
|
|
|
|
```
|
|
|
|
|