jqで配列に対して値を追加したい場合
pushなどの関数は提供されていないため配列の添字に対して|=
で値をアサインする方法で同じようなことを実現できる
末尾の添字を取得するためには配列の数を変数化してあとで参照させてあげれば良い
式の結果をexp as $hoge
とすることで以降変数$hoge
の中身を参照できるようになる
例として
- data.json
[ ["hoge", 1], ["fuga", 2] ]
これに["piyo", 3]
を追加する場合
$ cat data.json | jq 'length as $l|.[$1] |= ["piyo",3]' [ [ "hoge", 1 ], [ "fuga", 2 ], [ "piyo", 3 ] ]
こんな感じで配列の末尾(添字指定)のデータを生成することが可能
length
で配列の数を出しそれを$l
という変数に格納して後の式で配列の添字として使うことで末尾のデータを生成する
結果的に配列に対してpush的な挙動を実現することが可能になる