[英]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.