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