web-dev-qa-db-fra.com

Comment combiner un tableau en une seule valeur de chaîne lors de l'utilisation de la sortie CSV dans jq?

J'ai la commande jq suivante:

cat myFile.json | jq -r '.tickets[] | [.created_at, .id, .via.channel, .tags[]] | @csv'

Et il génère une ligne telle que:

"2016-02-02T10:00:00Z",99999,"web","tag1","tag2","tag3","tag4"

J'essaie de join le .tags[] array, pour que je puisse obtenir:

"2016-02-19T13:25:55Z",99999,"web","tag1,tag2,tag3,tag4"

J'ai essayé quelques choses, comme

cat myFile.json | jq -r '.tickets[] | [.created_at, .id, .via.channel, (.tags[] | join(","))] | @csv'

Mais cela donne des erreurs telles que

jq: error (at <stdin>:0): Cannot iterate over string ("tag1...)

Alors, comment puis-je rejoindre .tags[] dans la commande ci-dessus pour qu'au lieu de champs séparés, j'obtienne une seule valeur de chaîne (contenant des valeurs de balises séparées par des virgules)?

11
Emre Sevinç

Vous devez appeler join() dans la liste tags, pas les balises individuelles. Essayez avec:

jq -r '.tickets[] | [.created_at, .id, .via.channel, (.tags | join(","))] | @csv'
23
zwer