web-dev-qa-db-ja.com

jqでCSV出力を使用するときに配列を単一の文字列値に組み合わせる方法は?

次のjqコマンドがあります。

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

そして、次のような行を出力します。

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

join.tags[]配列を取得しようとしています。

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

私はいくつかのことを試しました

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

しかし、それは次のようなエラーを与えます

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

では、上記のコマンドで.tags[]を結合して、個別のフィールドではなく単一の文字列値(コンマ区切りのタグ値を含む)を取得するにはどうすればよいですか?

11
Emre Sevinç

個々のタグではなく、tagsリストでjoin()を呼び出す必要があります。試してみてください:

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