notebook

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

command

GitHub CLIで複数行に渡るコメントをIssueやPullRequestのbodyに含める

これができればGitHub CLIだけでも開発できるのでは? と思い調べてみた Multi line body with flags · Issue #595 · cli/cli github.com すでにIssueが立っていて、その中でいくつか選択肢が提示されていた そもそも、適当なファイルを作成し、複数行に渡る…

Git logでPRに貼り付ける用のワンライナー

コミット粒度に気を付けてコメントもしっかり書いておくと、PR作成してどんなことやったかを示す場合にコミットハッシュとコメントのリストを貼り付けることがある 以前コード結構書いていたときは手動でやっていた 最近やろうと思ったら意外と作業がだるか…

最初と最後の数行を指定して除いた中身を表示する

よくあるやつだがたまにやろうとするとぱっと出てこなかったので残しておく たとえば lintの結果のテキストファイルをさっと集計したいとかそういった場合 最初の3行は警告とは関係ない説明とかコマンド詳細などが表示されていて 最後の3行はSummaryが表示さ…

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…

dateコマンドで月初、月末、先週の期間を出力する

バッチ処理などの期間指定でよく遭遇するこの手の期間指定 必要になるたび調べていたのでよく使うものをまとめた 今 $ date Wed Mar 17 02:51:47 JST 2021 前日起算の月末 $ date -d "$(date -d "1 day ago 1 month" +"%Y-%m-01") 1 days ago" Wed Mar 31 00…

GitHub Cliにpecoを組み合わせる

便利に使っているGitHub CLIだがissueやprの操作は番号が必要なのでいちいち確認が面倒 リストをpecoで選択すると番号が出てくるようにしたら楽できそうということで設定した zshの設定に下記関数を追加してタイトルなどから選択してghコマンドの入力補助を…

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

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

スクリプトや設定ファイルをテンプレート化して環境変数を埋め込むenvsubstコマンド

簡単なスクリプトや設定ファイルなど、環境変数を埋め込んたファイルを生成したいみたいなパターンのときにenvsubstコマンドが使えます 今まで知らなかったことがもったいない ということでメモ残しておきます インストール gettextを入れると使えるようにな…

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…

git管理外のファイル間やコマンド実行結果間でdiffを見やすくする

Git管理外のファイル間もしくはコマンド実行結果(標準入力)間での差分表示 Git管理のファイルであればデフォルトでもそれなりのdiff表示をしてくれるけどdiffコマンドで比較した場合どうするのが良いのかと思って調べた Gitでのdiff表示に慣れてしまったた…

jqでエラーを無視する

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

jqで配列に値を追加する

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

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

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

grep,awk,nkf,jq,perlでバッファしないようにする

grep,awk,nkf,jq,perlでバッファしないようにする ログをtailして整形して流す際にどっかで出力をバッファしてしまって本来流れている部分全てが表示されずに困ってしまうことがあったので調べてみました grep おなじみgrep grep --line-buffered hoge awk …