This commit is contained in:
Mike Farah
2022-11-11 14:58:39 +11:00
parent db8a7617ce
commit 245a3dbe34
8 changed files with 95 additions and 8 deletions
+28
View File
@@ -0,0 +1,28 @@
# Array to Map
Use this operator to convert an array to..a map. The indices are used as map keys, null values in the array are skipped over.
Behind the scenes, this is implemented using reduce:
```
(.[] | select(. != null) ) as $i ireduce({}; .[$i | key] = $i)
```
## Simple example
Given a sample.yml file of:
```yaml
cool:
- null
- null
- hello
```
then
```bash
yq '.cool |= array_to_map' sample.yml
```
will output
```yaml
cool:
2: hello
```
+1 -1
View File
@@ -60,7 +60,7 @@ a: 2001-12-15
## Format: get the day of the week
Given a sample.yml file of:
```yaml
a: 2001-12-15T02:59:43.1Z
a: 2001-12-15
```
then
```bash
+3 -3
View File
@@ -337,7 +337,7 @@ Given a sample.yml file of:
a:
cool:
foo: bar
+id: hi
+@id: hi
```
then
```bash
@@ -357,7 +357,7 @@ Given a sample.yml file of:
a:
cool:
foo: bar
+id: hi
+@id: hi
```
then
```bash
@@ -375,7 +375,7 @@ Given a sample.yml file of:
a:
cool:
foo: bar
+id: hi
+@id: hi
```
then
```bash
+23
View File
@@ -80,3 +80,26 @@ will output
- frog
```
## Inserting into the middle of an array
using an expression to find the index
Given a sample.yml file of:
```yaml
- cat
- dog
- frog
- cow
```
then
```bash
yq '(.[] | select(. == "dog") | key + 1) as $pos | .[0:($pos)] + ["rabbit"] + .[$pos:]' sample.yml
```
will output
```yaml
- cat
- dog
- rabbit
- frog
- cow
```
+18
View File
@@ -135,6 +135,24 @@ will output
- 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