1.9 KiB
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:
- name: Bobo
type: dog
- name: Fifi
type: cat
As well as arrays of arrays of scalars (strings/numbers/booleans):
- [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.
name,type
Bobo,dog
Fifi,cat
Encode CSV simple
Given a sample.yml file of:
- [i, like, csv]
- [because, excel, is, cool]
then
yq -o=csv sample.yml
will output
i,like,csv
because,excel,is,cool
Encode TSV simple
Given a sample.yml file of:
- [i, like, csv]
- [because, excel, is, cool]
then
yq -o=tsv sample.yml
will output
i like csv
because excel is cool
Encode array of objects to csv
Given a sample.yml file of:
- name: Gary
numberOfCats: 1
likesApples: true
height: 168.8
- name: Samantha's Rabbit
numberOfCats: 2
likesApples: false
height: -188.8
then
yq -o=csv sample.yml
will output
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:
- name: Gary
numberOfCats: 1
likesApples: true
height: 168.8
- name: Samantha's Rabbit
numberOfCats: 2
likesApples: false
height: -188.8
then
yq -o=csv '[["Name", "Number of Cats"]] + [.[] | [.name, .numberOfCats ]]' sample.yml
will output
Name,Number of Cats
Gary,1
Samantha's Rabbit,2