txt -> jsonに変換する方法は?

txt -> jsonに変換する方法は?
C-11^Mark^Docking AWS
C-12^Mark^Docking AWS
C-13^Lay^Ploting
C-14^Lay^Ploting
C-15^Lay^Ploting
C-16^Vincent^GPU Calc
C-17^Vincent^GPU Calc
C-18^Vincent^GPU Calc
C-19^Vincent^GPU Calc

私は次のコマンドを使用します。

jq -Rn '
    [inputs | select(. != "") / "^"]
    | reduce .[] as [$container, $user, $job] ({};
      .[$job] += [{$user, $container}]
    )
    'test.csv > test.json

この形式のデータが欲しい

{
  "job": "Docking AWS",
  "user": "Mark",
  "container": [
    "C-11",
    "C-12"
 ]
}

。 。 。

この目標をどのように達成できますか?

ベストアンサー1

この質問は元の調整のためでした。別の問題、私が提供した回答。私もそこで調整された問題を解決しました。

私が思いついたシェルコードは次のとおりです。

jq -Rn '
    reduce ( inputs / "^" ) as [$container,$user,$job] ({}; 
        .[$job] |= ( .job       |=   $job  |
                     .user      |=   $user |
                     .container += [ $container ] )
    ) | [ .[] ]' file

reduceこれは、最上位オブジェクト内の子オブジェクトとしてオブジェクトを作成するために使用され、各オブジェクトは作業文字列として入力されます。すべてのデータがこのように処理されると、子オブジェクトは最上位の配列に展開されます。

質問のデータが与えられると、次のJSON文書が生成されます。

[
  {
    "job": "Docking AWS",
    "user": "Mark",
    "container": [
      "C-11",
      "C-12"
    ]
  },
  {
    "job": "Ploting",
    "user": "Lay",
    "container": [
      "C-13",
      "C-14",
      "C-15"
    ]
  },
  {
    "job": "GPU Calc",
    "user": "Vincent",
    "container": [
      "C-16",
      "C-17",
      "C-18",
      "C-19"
    ]
  }
]

おすすめ記事