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"
]
}
]