notebook

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

jq

GitHub CLIで自身のリポジトリのPullRequest一覧を取得する

プライベートなリポジトリも含め自身が管理しているリポジトリにおいて、RenovateやDependabotなどを用いて自動的にPullRequestを出してもらうリポジトリが増えてきた 今までだと定期的にリポジトリのページに行って確認してたりしていたが、リポジトリの量…

jqでファイルに書き出したリストを用いて比較する

調査などである値のリスト出力して他のリストと付け合わて比較したいみたいな場合のメモ書き users.json [ { "name": "foo1", "description": "bbbbb" }, { "name": "foo2", "description": "aaaaa" }, { "name": "bar1", "description": "ccccc" }, { "name…

jqでjsonからCSVを生成する

ちょっとした集計などで使うデータの形式はjsonが多いが、たまにツール側の事情でCSVが欲しくなるときもある 具体的に言うと、データポータルにアップロードして単発で使いたい場合はCSVしかサポートされていないのでCSVが必要だったりする さくっと変換でき…

jqで特定リストの中のどれかにマッチするか?という条件を扱う

Rubyでいうinclude?的なことをやりたかったがさっとできなかったのでメモを残す サンプルはこんな感じ $ cat sample.json [ { "user": "hoge", "team": "" }, { "user": "fuga", "team": "" }, { "user": "piyo", "team": "" }, { "user": "foo", "team": ""…

jqで曜日判定をする

jqで土日を判定するみたいなことができる isoの日付からfromdateでunixタイムスタンプへ変換しそれをgmtimeへ渡すと日時に関する配列が返ってくる その中に曜日の情報も含まれている よくある2020-08-01のような形式のテキストを判定してみる $ echo '{"star…

jqで複数ハッシュのmergeをする

RubyでいうHash.merge的な処理をjqでもやりたいとき 集計結果をいくつかのファイルに出力しておき最後にサマリーとしてJSONにまとめたいときなどに使う 書いていて感じたけどあまりこういう機会はないかもしれない… 01.json { "hoge": 1, "fuga": 2 } 02.jso…

jqで任意の件数だけ出力する

簡単にできるやろと思ったらそんなことなかったのでメモしておく 件数指定する 単純に件数を指定するだけであればlimitでOK $ echo '[1,2,3,4,5,6,7,8,9,10]' | jq 'limit(3; .[])' 1 2 3 これは簡単 絞り込みや並び替え後に件数指定する 上記のような単純な…

jqのreduceを使ってカジュアルに集計する

今回はjqのreduceを使ってさくさく集計を行ってみます サンプル hoge.json [ { "value": 1, "label": "hoge" }, { "value": 3, "label": "fuga" }, { "value": 2, "label": "hoge" }, { "value": 2, "label": "hoge" } ] サンプルのjson APIのレスポンスなど…

jqで条件にマッチしないデータをnotとselectで除外する

jqを使っていて「特定の文字列を含んでない」レコードをselectしたいみたいなケースの話 感覚的には条件式に!をつけて否定したものを条件として使いたかったがそういう書き方はできない 調べてみたら次のスレッドで言及されていた jq - How to filter a json…

jqでエラーを無視する

最近までまったく知らなかったのですがここまでできるのか!という感じだったので残しておく ?オペレータ tryのショートハンド、式の実行を行いエラーの場合は無視してくれる テキストファイルからjsonの値だけ扱う -Rオプションでrawテキストから読み込むこ…

jqで配列に値を追加する

jqで配列に対して値を追加したい場合 pushなどの関数は提供されていないため配列の添字に対して|=で値をアサインする方法で同じようなことを実現できる 末尾の添字を取得するためには配列の数を変数化してあとで参照させてあげれば良い 式の結果をexp as $ho…

jqで特定の値を書き換える

たとえば本番のログから特定のキーだけデータを変えて(マスクして)保存したいみたいなとき 普通にやればsedやawkで頑張ってできそうですがjqであればサクッとできてしまいます 今回下記のサンプルjsonを用意しました sample.json { "hoge": "fuga", "foo":…