[英]How to add a header to CSV export in jq?
我正在从jq
教程中修改命令:
curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' \
| jq -r -c '.[] | {message: .commit.message, name: .commit.committer.name} | [.[]] | @csv'
哪个csv
导出很好,但缺少标题作为顶部:
"Fix README","Nicolas Williams"
"README: send questions to SO and Freenode","Nicolas Williams"
"usage() should check fprintf() result (fix #771)","Nicolas Williams"
"Use jv_mem_alloc() in compile.c (fix #771)","Nicolas Williams"
"Fix header guards (fix #770)","Nicolas Williams"
如何在顶部添加标题(在本例中为message,name
)? (我知道它可以手动,但如何在jq
内完成?)
只需在值前面的数组中添加标题文本即可。
["Commit Message","Committer Name"], (.[].commit | [.message,.committer.name]) | @csv
根据Anton对Jeff Mercado的回答的评论,这段代码将获取第一个元素的属性的关键名称,并在行之前将它们作为数组输出,从而将它们用作标题。 如果不同的行具有不同的属性,那么它将无法正常工作; 然后再次,结果CSV也不会。
map({message: .commit.message, name: .commit.committer.name}) | (.[0] | to_entries | map(.key)), (.[] | [.[]]) | @csv
虽然我完全意识到OP正在寻找纯粹的jq答案,但我发现这个问题正在寻找任何答案。 所以,让我提供一个我发现(并发现有用)给我这样的人。
sudo apt install moreutils
- 如果你还没有它们。 Moreutils网站 。 echo "Any, column, name, that, is, not, in, your, json, object" | cat - your.csv | sponge your.csv
缺点:需要moreutils
包,不仅仅是jq
-reliant,所以有些人会说不那么优雅。
优点:您选择标题,而不是JSON键。 此外, 纯jq
方式会受到键的排序的影响, 具体取决于您的版本 。
tee
做到这一点,而无需安装任何包! 不,你不能,正如科斯在这里所展示的那样 。 除非你在某些时候失去你的csv是好的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.