How to add a header to CSV export in jq?

后端 未结 3 2216
滥情空心
滥情空心 2021-02-18 23:30

I\'m taking a modified command from the jq tutorial:

curl \'https://api.github.com/repos/stedolan/jq/commits?per_page=5\' \\
| jq -r -c \'.[] | {mes         


        
相关标签:
3条回答
  • 2021-02-18 23:51

    Just add the header text in an array in front of the values.

    ["Commit Message","Committer Name"], (.[].commit | [.message,.committer.name]) | @csv
    
    0 讨论(0)
  • 2021-02-19 00:02

    While I fully realize OP was looking for a purely jq answer, I found this question looking for any answer. So, let me offer one I found (and found useful) to others like me.

    1. sudo apt install moreutils - if you don't have them yet. Moreutils website.
    2. echo "Any, column, name, that, is, not, in, your, json, object" | cat - your.csv | sponge your.csv

    Disadvantages: requires moreutils package, is not just jq-reliant, so some would understandably say less elegant.

    Advantages: you choose your headers, not your JSON keys. Also, pure jq ways are bothered by the sorting of the keys, depending on your version.

    How does it work?

    1. echo outputs your header
    2. cat - takes echo output from stdin (cause -) and conCATenates it with your csv file
    3. sponge waits until that is done and writes the result to same file, overwriting it.

    But you could do it with tee without having to install any packages!

    No, you could not, as Kos excellently demonstrates here. Not unless you're fine with loosing your csv at some point.

    0 讨论(0)
  • 2021-02-19 00:04

    Based on Anton's comments on Jeff Mercado's answer, this snippet will get the key names of the properties of the first element and output them as an array before the rows, thus using them as headers. If different rows have different properties, then it won't work well; then again, neither would the resulting CSV.

    map({message: .commit.message, name: .commit.committer.name}) | (.[0] | to_entries | map(.key)), (.[] | [.[]]) | @csv

    0 讨论(0)
提交回复
热议问题