コマンドライン JSON プロセッサ。
jq 'map(select(.status == "200"))'
または
jq '[ .[] | select(.status == "200") ]'
jq 'map(select(.url|startswith("/login")))'
jq 'map(select(.size|tonumber >= 1000)'
jq 'map(select(.status == "200" and (.url|startswith("/login")) and (.size|tonumber > 1000)))'
各行が JSON になっているログファイルのチェックにコマンドライン JSON プロセッサの jq 使ってみた。
とりあえず | オペレータが肝なのと、フィルタリングには select 関数を使えば良いということを理解した。あと関数はパイプライン的に受け取るデータと、引き数とで受けとるデータとの2種類があるのでちょっと慣れが必要。普段からレシピを作っておく方が良さそげ。気がついたら http://www.naney.org/diki/dk/jq.html の方にメモっておくことにする。
ワンライナーで書けるのは便利だけれど、大量の JSON データでかつきちんと parse しないで正規表現で抜けるようなデータの場合は Perl でチャキチャキっとやった方が当然だけれど圧倒的に高速なのでうまく使い分けだね。
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
nDiki は1999年1月に始めたコンピュータ日誌を前身とする Naney の Web 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。
※内容は個人的見解であり所属組織とは関係ありません。