jqと最終予想出力を使用して、次のjsonデータを入力しようとしています。
cat data.json
{
"params": {
"filters": {},
"group_by": [
"service"
],
"metrics": [
"cocekop:count",
"cocekop.seconds_to_first_ack:avg",
"cocekop.seconds_to_resolve:avg",
"cocekop.escalated:count"
],
"since": "2022-03-01T15:00:00.000Z",
"time_zone": "Asia/Tokyo",
"until": "2022-03-02T14:59:59.000Z"
},
"report": {
"groups": [
[{
"id": "PKOLSA",
"name": "Commuincation"
},
{
"id": "PRKOLS",
"name": "Designation"
},
{
"id": "PKDFKDL",
"name": "Mapping"
}
]
],
"metrics": {
"cocekop.escalated:count": [
1,
0,
0
],
"cocekop.seconds_to_first_ack:avg": [
86,
0,
9
],
"cocekop.seconds_to_resolve:avg": [
8161,
492,
301
],
"cocekop:count": [
1,
1,
0
]
}
}
}
出力になると予想します。
id,name,cocekop:count
PKOLSA,Commuincation,1
PRKOLS,Designation,1
PKDFKDL,Mapping,0
助けてください。
答え1
jq -r --arg metric "cocekop:count" '
[ "id", "name", $metric ],
(
(
[
.report.groups[0][] |
[.[]]
] |
transpose
) +
[
.report.metrics[$metric]
] |
transpose[]
) | @csv' file
または気の利いた言葉が好きなら:
jq -r --arg metric "cocekop:count" '["id","name",$metric],(([.report.groups[0][]|[.[]]]|transpose)+[.report.metrics[$metric]]|transpose[])|@csv' file
質問に入力された内容を考慮すると、結果は次のようになります。
"id","name","cocekop:count"
"PKOLSA","Commuincation",1
"PRKOLS","Designation",1
"PKDFKDL","Mapping",0
最初のものは、transpose
入力から次の中間結果を生成します。
[
[
"PKOLSA",
"PRKOLS",
"PKDFKDL"
],
[
"Commuincation",
"Designation",
"Mapping"
]
]
これを行うには、ユーザー提供の変数を使用して$metric
選択した指標データを追加して、次のようにします。
[
[
"PKOLSA",
"PRKOLS",
"PKDFKDL"
],
[
"Commuincation",
"Designation",
"Mapping"
],
[
1,
1,
0
]
]
2番目は、transpose
列配列を行配列に変換して@csv
データをCSV形式で出力します。タイトルはjq
式の最初の行によって生成されます。