簡體   English   中英

如何在jq中為CSV導出添加標題?

[英]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答案,但我發現這個問題正在尋找任何答案。 所以,讓我提供一個我發現(並發現有用)給我這樣的人。

  1. sudo apt install moreutils - 如果你還沒有它們。 Moreutils網站
  2. echo "Any, column, name, that, is, not, in, your, json, object" | cat - your.csv | sponge your.csv

缺點:需要moreutils包,不僅僅是jq -reliant,所以有些人會說不那么優雅。

優點:您選擇標題,而不是JSON鍵。 此外, jq方式會受到鍵的排序的影響, 具體取決於您的版本

它是如何工作的?

  1. echo輸出你的標題
  2. cat - 從stdin(cause - )獲取e​​cho輸出並使用csv文件對其進行conCATenate
  3. 海綿等待直到完成並將結果寫入同一文件,覆蓋它。

但你可以用tee做到這一點,而無需安裝任何包!

不,你不能,正如科斯在這里所展示的那樣 除非你在某些時候失去你的csv是好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM