[英]Convert json filtered into csv with jq
我有看起來像這樣的文件:
$ cat sample-test.json |jq .
{
"logRef": "c4fa4367-23f6-462f-b5fd-f972d0916a30",
"timestamp": 1563268297545,
"someOtherField": "nonImportantValue"
}
{
"logRef": "c4fa4367-23f6-462f-b5fd-f972d0916a31",
"timestamp": 1563268297595,
"someOtherField2": "nonImportantValue3"
}
我想像這樣將其轉換為 csv:
logRef;timestamp
c4fa4367-23f6-462f-b5fd-f972d0916a30;1563268297545
c4fa4367-23f6-462f-b5fd-f972d0916a31;1563268297595
我在嘗試
$ cat sample-test.json |jq '.logRef, .timestamp |@csv'
jq: error (at <stdin>:1): string ("c4fa4367-2...) cannot be csv-formatted, only array
jq: error (at <stdin>:2): string ("c4fa4367-2...) cannot be csv-formatted, only array
您的輸入很好(它是一個 JSON 流)。
您的過濾器的問題在於@csv
需要一個數組。 所以這將起作用:
[.logRef,.timestamp] | @csv
但是它引用了字符串,所以如果你希望你的字符串不加引號(這可能意味着結果不會是 CSV),那么你可以使用:
"\(.logRef),\(.timestamp)"
在所有情況下,您都需要使用 jq 的-r
命令行選項。
您的 json 文件中的問題。 看起來它的格式不正確(沒有根數組元素[]
和文檔之間的逗號)。 如果您修復它, jq
將按預期工作。
> cat sample-test.json
[{
"logRef": "c4fa4367-23f6-462f-b5fd-f972d0916a30",
"timestamp": 1563268297545,
"someOtherField": "nonImportantValue"
},
{
"logRef": "c4fa4367-23f6-462f-b5fd-f972d0916a31",
"timestamp": 1563268297595,
"someOtherField2": "nonImportantValue3"
}]
cat sample-test.json |jq -r 'map(.logRef), map(.timestamp) | @csv'
"c4fa4367-23f6-462f-b5fd-f972d0916a30","c4fa4367-23f6-462f-b5fd-f972d0916a31"
1563268297545,1563268297595
我還使用map()
函數修復了該命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.