2.5 KiB
Sort
Sorts an array. Use sort
to sort an array as is, or sort_by(exp)
to sort by a particular expression (e.g. subfield).
To sort by descending order, pipe the results through the reverse
operator after sorting.
Note that at this stage, yq
only sorts scalar fields.
Sort by string field
Given a sample.yml file of:
- a: banana
- a: cat
- a: apple
then
yq 'sort_by(.a)' sample.yml
will output
- a: apple
- a: banana
- a: cat
Sort by multiple fields
Given a sample.yml file of:
- a: dog
- a: cat
b: banana
- a: cat
b: apple
then
yq 'sort_by(.a, .b)' sample.yml
will output
- a: cat
b: apple
- a: cat
b: banana
- a: dog
Sort descending by string field
Use sort with reverse to sort in descending order.
Given a sample.yml file of:
- a: banana
- a: cat
- a: apple
then
yq 'sort_by(.a) | reverse' sample.yml
will output
- a: cat
- a: banana
- a: apple
Sort array in place
Given a sample.yml file of:
cool:
- a: banana
- a: cat
- a: apple
then
yq '.cool |= sort_by(.a)' sample.yml
will output
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:
cool:
- b: banana
- a: banana
- c: banana
then
yq '.cool |= sort_by(keys | .[0])' sample.yml
will output
cool:
- a: banana
- b: banana
- c: banana
Sort is stable
Note the order of the elements in unchanged when equal in sorting.
Given a sample.yml file of:
- a: banana
b: 1
- a: banana
b: 2
- a: banana
b: 3
- a: banana
b: 4
then
yq 'sort_by(.a)' sample.yml
will output
- 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:
- a: 10
- a: 100
- a: 1
then
yq 'sort_by(.a)' sample.yml
will output
- a: 1
- a: 10
- a: 100
Sort by custom date field
Given a sample.yml file of:
- a: 12-Jun-2011
- a: 23-Dec-2010
- a: 10-Aug-2011
then
yq 'with_dtf("02-Jan-2006"; sort_by(.a))' sample.yml
will output
- a: 23-Dec-2010
- a: 12-Jun-2011
- a: 10-Aug-2011
Sort, nulls come first
Given a sample.yml file of:
- 8
- 3
- null
- 6
- true
- false
- cat
then
yq 'sort' sample.yml
will output
- null
- false
- true
- 3
- 6
- 8
- cat