yq/usage/csv-tsv.md
2022-07-29 14:33:26 +10:00

1.3 KiB

Working with CSV, TSV

{% hint style="warning" %} Note that versions prior to 4.18 require the 'eval/e' command to be specified.

yq e <exp> <file> {% endhint %}

Yaml to CSV/TSV

You can convert compatible yaml structures to CSV or TSV by using:

  • --output-format=csv or -o=c for csv (comma separated values)
  • --output-format=tsv or -o=t for tsv (tab separated values)

Compatible structures is either an array of scalars (strings/numbers/booleans), which is a single row; or an array of arrays of scalars (multiple rows).

- [i, like, csv]
- [because, excel, is, cool]

then

yq '.' -o=csv sample.yaml

will output:

i,like,csv
because,excel,is,cool

Similarly, for tsv:

yq '.' -o=tsv sample.yaml

will output:

i	like	csv
because	excel	is	cool

Converting an array of objects to CSV

If you have a yaml document like:

foo: bar
items:
  - name: Tom
    species: cat
    color: blue
  - name: Jim
    species: dog
    color: brown

To convert to CSV, you need to transform this into a array of CSV rows. Assuming you also want a header, then you can do:

yq '[["name", "species", "color"]] + [.items[] | [.name, .species, .color]]' data.yaml -o=csv

to yield:

name,species,color
Tom,cat,blue
Jim,dog,brown