jqを使用して複数のJSONオブジェクトの特定の値をcsvに解析する方法

jqを使用して複数のJSONオブジェクトの特定の値をcsvに解析する方法

私は次のJSONを持っています:

[
   {
      "ip":"105.105.105.105",
      "timestamp":"1543746097",
      "ports":[
         {
            "port":80,
            "proto":"tcp",
            "status":"open",
            "reason":"syn-ack",
            "ttl":128
         }
      ]
   },
   {
      "ip":"105.105.105.105",
      "timestamp":"1543746097",
      "ports":[
         {
            "port":53,
            "proto":"tcp",
            "status":"open",
            "reason":"syn-ack",
            "ttl":128
         }
      ]
   }
]

csvポートを簡単な出力に抽出したい

80,53

頑張った

jq -r '.[]."ports" | map(.port) | @csv' 105.105.105.105_tcp.json

そして

jq -r '.[]."ports" | map(.port) | join(",")' 105.105.105.105_tcp.json

しかし、それらのどれも動作しません。

ベストアンサー1

以下はjq専用のソリューションです。

jq -r '[ .[].ports[].port ]|@csv' network.json
80,53

ここでのアプローチは、ポート番号を検索して配列にラップし、それをCSV形式に変換することです。

おすすめ記事