[英]How to combine jq array value into same key in json file in shell script?
我有一個包含以下內容的 json 文件:
[
{
"id": "one",
"msg": [
"test"
],
"FilePath": [
"JsonSerializer.cs",
"ChatClient.cs",
"MiniJSON.cs"
],
"line": [
358,
1241,
382
]
},
{
"id": "two",
"msg": [
"secondtest"
],
"FilePath": [
"Utilities.cs",
"PhotonPing.cs"
],
"line": [
88,
36
]
}
]
我想要 output ,你可以看到值合並為一個:
one
[
"test"
]
[
"JsonSerializer.cs",358
"ChatClient.cs",1241
"MiniJSON.cs",382
]
two
[
"secondtest"
]
[
"Utilities.cs",88
"PhotonPing.cs",36
]
我試過這個cat stack.json |jq -r '.[]|.id,.msg,.FilePath,.line'
給 output 作為
one
[
"test"
]
[
"JsonSerializer.cs",
"ChatClient.cs",
"MiniJSON.cs"
]
[
358,
1241,
382
]
two
[
"secondtest"
]
[
"Utilities.cs",
"PhotonPing.cs"
]
[
88,
36
]
請幫我解決這個問題,我已經嘗試了很多調試但無法通過。 此外,每個文件路徑和行總是相似的。 例如,如果 FilePath 有 3,則 line 也有 3 個值。
<stack.json jq -r '.[] | .id, .msg, ([.FilePath, .line]|transpose|add)'
根據您的要求提供 output。
transpose
將[[1,2,3],[4,5,6]]
轉換為[[1,4],[2,5],[3,6]]
add
所有數組元素收集到一個數組中。
如果您希望在一行中包含文件路徑和行號,我建議將它們格式化為字符串,用冒號分隔:
.[] | .id, .msg, ([.FilePath, .line]|transpose|map(join(":")))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.