# 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: ```yaml [{a: banana}, {a: cat}, {a: apple}] ``` then ```bash yq 'sort_by(.a)' sample.yml ``` will output ```yaml [{a: apple}, {a: banana}, {a: cat}] ``` ## Sort by multiple fields Given a sample.yml file of: ```yaml [{a: dog}, {a: cat, b: banana}, {a: cat, b: apple}] ``` then ```bash yq 'sort_by(.a, .b)' sample.yml ``` will output ```yaml [{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: ```yaml [{a: banana}, {a: cat}, {a: apple}] ``` then ```bash yq 'sort_by(.a) | reverse' sample.yml ``` will output ```yaml [{a: cat}, {a: banana}, {a: apple}] ``` ## Sort array in place Given a sample.yml file of: ```yaml cool: - a: banana - a: cat - a: apple ``` then ```bash yq '.cool |= sort_by(.a)' sample.yml ``` 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 yq '.cool |= sort_by(keys | .[0])' sample.yml ``` will output ```yaml 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: ```yaml [{a: banana, b: 1}, {a: banana, b: 2}, {a: banana, b: 3}, {a: banana, b: 4}] ``` then ```bash yq 'sort_by(.a)' sample.yml ``` 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 yq 'sort_by(.a)' sample.yml ``` will output ```yaml [{a: 1}, {a: 10}, {a: 100}] ``` ## Sort by custom date field Given a sample.yml file of: ```yaml [{a: 12-Jun-2011}, {a: 23-Dec-2010}, {a: 10-Aug-2011}] ``` then ```bash yq 'with_dtf("02-Jan-2006"; sort_by(.a))' sample.yml ``` will output ```yaml [{a: 23-Dec-2010}, {a: 12-Jun-2011}, {a: 10-Aug-2011}] ``` ## Sort, nulls come first Given a sample.yml file of: ```yaml [8, 3, null, 6, true, false, cat] ``` then ```bash yq 'sort' sample.yml ``` will output ```yaml [null, false, true, 3, 6, 8, cat] ```