jqを使用してjsonデータを入力し、発生回数を印刷します。

jqを使用してjsonデータを入力し、発生回数を印刷します。

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'

jqplayデモ

おすすめ記事