![jq를 사용하여 json 데이터를 채우고 발생 횟수를 인쇄합니다.](https://linux55.com/image/203930/jq%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20json%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EC%B1%84%EC%9A%B0%EA%B3%A0%20%EB%B0%9C%EC%83%9D%20%ED%9A%9F%EC%88%98%EB%A5%BC%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EB%8B%A4..png)
jq를 사용하여 다음 json 데이터를 채우려고 하며 다음과 같은 출력을 기대합니다.
{
"data": [
{
"topic_name": "BookShow",
"topic_id": "ABCDFG",
"urgency": "high"
},
{
"topic_name": "AmzonMarket",
"topic_id": "ESDCGHY",
"urgency": "high"
},
{
"topic_name": "AmzonMarket",
"topic_id": "ESDCGHY",
"urgency": "high"
},
{
"topic_name": "BookShow",
"topic_id": "ABCDFG",
"urgency": "high"
},
{
"topic_name": "bookTick",
"topic_id": "KOLPUYDD",
"urgency": "high"
},
{
"topic_name": "bookTick",
"topic_id": "KOLPUYDD",
"urgency": "high"
}
],
"more": false,
"limitations": 100,
"range": 0
}
원하는 출력은 다음과 같습니다. 여기서 "발생"은 발생 횟수를 계산하는 데 사용되는 새 필드입니다.
"id","name","occurrences"
"KOLPUYDD","bookTick",2
"ABCDFG","BookShow",2
"ESDCGHY","AmzonMarket",2
지원해주세요.
답변1
group_by
원하는 개체 그룹을 구성 topic_id
하고 해당 개체에서 CSV를 만드는 데 사용됩니다 .
jq --raw-output '[ "id", "name", "occurrences" ], ( .data | group_by(.topic_name)[] |
{ id: .[0].topic_id, name: .[0].topic_name, occurrences: length } |
[.id, .name, .occurrences]) | @csv'
답변2
jq
배열에서 데이터를 가져오는 데에만 사용 하고 고유한 항목 수를 계산하려면 data
Miller( )를 사용하세요 .mlr
$ jq '.data' file | mlr --ijson --ocsv uniq -c -g topic_id,topic_name,urgency
topic_id,topic_name,urgency,count
ABCDFG,BookShow,high,2
ESDCGHY,AmzonMarket,high,2
KOLPUYDD,bookTick,high,2
이 필드를 제거 urgency
하고 나머지 필드의 레이블을 다시 지정하려면 다음을 수행하십시오.
$ jq '.data' file | mlr --ijson --ocsv uniq -c -g topic_id,topic_name,urgency then cut -x -f urgency then label id,name,occurrences
id,name,occurrences
ABCDFG,BookShow,2
ESDCGHY,AmzonMarket,2
KOLPUYDD,bookTick,2