誰かが以下のjsonを私が期待するcsvに変換する方法を案内してくれることを願っています。
よろしくお願いします。
アップデート:提供されたソリューションに感謝します。ただし、2番目の列にレコードが1つしかない場合、配列が存在しないことがあります。以下の例は、「unixhost1123」とペアになっているレコードが1つしかない「ASite」です。
ソースJSON
[
{
"results": [
[
"sm-clust001",
[
"163slesm02",
"163slesm01"
]
],
[
"sm-cssl112",
[
"ucsbnchac240",
"ucsbnchac209",
"ucsbnchac241",
"ucsbnchac242"
]
],
[
"ASite",
"unixhost1123"
]
]
}
]
CSVを楽しみにしています
"sm-clust001","163slesm02"
"sm-clust001","163slesm01"
"sm-cssl112","ucsbnchac240"
"sm-cssl112","ucsbnchac209"
"sm-cssl112","ucsbnchac241"
"sm-cssl112","ucsbnchac242"
"ASite","unixhost1123"
ベストアンサー1
.[].results[]
配列のセットです。各配列では、最初の要素は最初の列に含める要素であり、2番目の要素は繰り返す別の配列です。
$name
したがって、最初の要素(一種のクラスタ名と仮定)を追跡し、サブ配列の各要素と一緒に出力してみましょう。
.[].results[] | .[0] as $name | .[1][]? // .[1] | [ $name, . ] | @csv
このビットは、.[1][]? // .[1]
サブ配列の要素がある場合に選択され、それ以外の場合は配列の2番目の要素が選択されることを示します(スカラーであると仮定)。
コマンドラインから:
jq -r '.[].results[] | .[0] as $name | .[1][]? // .[1] | [ $name, . ] | @csv' file
サンプル文書の結果を見ると、次のようになります。
"sm-clust001","163slesm02"
"sm-clust001","163slesm01"
"sm-cssl112","ucsbnchac240"
"sm-cssl112","ucsbnchac209"
"sm-cssl112","ucsbnchac241"
"sm-cssl112","ucsbnchac242"
"ASite","unixhost1123"
このソリューションは複数の列に適用されます。私の答えユーザーへフォローアップの質問。