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
]
]
두 번째는 transpose
열 배열을 행 배열로 변환하여 @csv
데이터를 CSV 형식으로 출력합니다. 제목은 jq
표현식의 첫 번째 줄에 의해 생성됩니다.