... | jq -r '.rows[] | .[] | [.name, .["cpu.total"], .["memory.total"]] | map(tostring) | join(",")'
Isto:
-
Expande a matriz em
.rows
no fluxo de saída (.rows.[]
). -
Canais que fluem para o próximo passo (
|
). - Expande o objeto que é dado no valor único (neste caso) que ele continha (
.[]
). -
Cria uma matriz com os resultados de
.name
,.["cpu.total"]
e.["memory.total"]
cada um avaliado nesse objeto (.[ .name, ... ]
). -
Converte todos os valores dessa matriz into strings (
map(tostring)
). -
Junta os elementos de cada matriz com uma vírgula (
join(",")
).
jq -r
produz dados brutos , em vez de citar e escapar. A saída é então:
foo-01,12,16267368kB
foo-02,12,16264296kB
como você queria. Dependendo do seu analisador CSV & os dados reais, você pode precisar de citações extras em torno das strings, que você pode adicionar, ou usar @csv
no lugar das duas últimas etapas.
... | jq -r '.rows[] | .[] | [.name, .["cpu.total"], .["memory.total"]] | @csv'
Poderíamos pular o map
convertendo apenas o valor interno, o que leva alguns colchetes extras:
... | jq -r '.rows[]|.[]|[.name, (.["cpu.total"] | tostring), .["memory.total"]] | join(",")'
E provavelmente a alternativa mais feia:
... | jq -r '.rows[]|to_entries|.[]|.key + "," + (.value["cpu.total"] | tostring) + "," + .value["memory.total"]'
Nesse caso, não confiamos no campo .name
e criamos a string inteira manualmente. Se você precisa de um formato altamente personalizado, essa é a opção mais flexível.