notebook

都内でWEB系エンジニアやってます。

jqで配列に値を追加する

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的な挙動を実現することが可能になる