mirror of
https://github.com/mikefarah/yq.git
synced 2024-12-19 20:19:04 +00:00
114 lines
1.9 KiB
Markdown
114 lines
1.9 KiB
Markdown
# CSV
|
|
Encode/Decode/Roundtrip CSV and TSV files.
|
|
|
|
## Encode
|
|
Currently supports arrays of homogenous flat objects, that is: no nesting and it assumes the _first_ object has all the keys required:
|
|
|
|
```yaml
|
|
- name: Bobo
|
|
type: dog
|
|
- name: Fifi
|
|
type: cat
|
|
```
|
|
|
|
As well as arrays of arrays of scalars (strings/numbers/booleans):
|
|
|
|
```yaml
|
|
- [Bobo, dog]
|
|
- [Fifi, cat]
|
|
```
|
|
|
|
## Decode
|
|
Decode assumes the first CSV/TSV row is the header row, and all rows beneath are the entries.
|
|
The data will be coded into an array of objects, using the header rows as keys.
|
|
|
|
```csv
|
|
name,type
|
|
Bobo,dog
|
|
Fifi,cat
|
|
```
|
|
|
|
|
|
## Encode CSV simple
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
- [i, like, csv]
|
|
- [because, excel, is, cool]
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=csv sample.yml
|
|
```
|
|
will output
|
|
```csv
|
|
i,like,csv
|
|
because,excel,is,cool
|
|
```
|
|
|
|
## Encode TSV simple
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
- [i, like, csv]
|
|
- [because, excel, is, cool]
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=tsv sample.yml
|
|
```
|
|
will output
|
|
```tsv
|
|
i like csv
|
|
because excel is cool
|
|
```
|
|
|
|
## Encode array of objects to csv
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
- name: Gary
|
|
numberOfCats: 1
|
|
likesApples: true
|
|
height: 168.8
|
|
- name: Samantha's Rabbit
|
|
numberOfCats: 2
|
|
likesApples: false
|
|
height: -188.8
|
|
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=csv sample.yml
|
|
```
|
|
will output
|
|
```csv
|
|
name,numberOfCats,likesApples,height
|
|
Gary,1,true,168.8
|
|
Samantha's Rabbit,2,false,-188.8
|
|
```
|
|
|
|
## Encode array of objects to custom csv format
|
|
Add the header row manually, then the we convert each object into an array of values - resulting in an array of arrays. Pick the columns and call the header whatever you like.
|
|
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
- name: Gary
|
|
numberOfCats: 1
|
|
likesApples: true
|
|
height: 168.8
|
|
- name: Samantha's Rabbit
|
|
numberOfCats: 2
|
|
likesApples: false
|
|
height: -188.8
|
|
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=csv '[["Name", "Number of Cats"]] + [.[] | [.name, .numberOfCats ]]' sample.yml
|
|
```
|
|
will output
|
|
```csv
|
|
Name,Number of Cats
|
|
Gary,1
|
|
Samantha's Rabbit,2
|
|
```
|
|
|