Csv
如何在沒有鍵(只有值)的情況下 jq 嵌套數組並轉換為 csv
我希望有人可以指導我如何將下面的 json 轉換為我期望的 csv。
非常感謝提前。
更新:感謝提供的解決方案,但我發現有時當第二列只有 1 條記錄時數組不存在,下面的範例是“ASite”只有 1 條記錄“unixhost1123”與之配對。
源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"
.[].results[]
是一組數組。在每個數組中,第一個元素是您想要在第一列中擁有的元素,第二個元素是我們想要循環的另一個數組。因此,讓我們跟踪其中的第一個元素
$name
(假設這是某種集群名稱),然後將其與子數組的每個元素一起輸出:.[].results[] | .[0] as $name | .[1][]? // .[1] | [ $name, . ] | @csv
表示
.[1][]? // .[1]
選擇子數組元素(如果存在)的位,否則選擇數組的第二個元素(並假設它是一個標量)。在命令行上:
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"