jqクックブック
RESTユーザ、NetOps、DevOpsのためのJSON解析レシピ
著者 | 豊沢 聡 |
---|---|
判型 | B5変型、296頁 |
ISBN | 978-4-87783-508-8 |
価格 | 本体3,600円 |
発行日 | 2023年5月20日(初版 第1刷発行) |
備考 | ダウンロードサービス:学習に使えるサンプルファイル |
本書について
本書は、ある程度までjqを使い込んだ読者をターゲットとしています。ベーシックな用法は、導入篇の『jqハンドブック』を参照してください。
jqは、JSONからほしいデータだけをさくっと抽出するコマンドライン指向のツールです。REST APIの応答をそのままパイプ経由で処理できるため、DevOpsやNetOpsに好んで利用されています。
jqはしかし、プロパティ値を抜き出すだけのツールではありません。他のテキスト処理ツールと比べても遜色のない機能が備わっているので、日付文字列を変換する、2つの配列から共通要素を探すなどの操作もできます。whileやifなどの制御構造や変数定義の機能もあるので、プログラミングらしいこともできます。関数を作成して呼び出すといった、シェルスクリプト的な使い方も可能です。
とは言え、jqは根源的に、フィルタの処理結果を次のフィルタに入力することで段階的に入力を変形していくパイプライン処理メカニズムです。一般のスクリプト言語にはない制約やスタイルがあり、awkなどと比べるとわかりにくいところがあります。
本書は、値の抽出にとどまらないこれらjqの高度な使い方を紹介します。複雑なJSONテキストの処理をjq単体で書けるようになるのが目標です。不要な行の削除や出力の調整はgrepなどのおなじみのツールに任せてパイプで組み合わせることもできますが、1つの処理系だけで書ければ、メンテナンスや共有が楽になります。
本書では、各種の問題に対するレシピをjqの関数の形で提示します。読者はそれら関数をそのまま利用してもよいですが、本書の主たる目的は、類似の問題を自力で解決できるよう、jqのコーディングパターンを理解するところにあります。もちろん、すべてのユースケースを紹介できるわけはありませんし、掲載した解法よりも美しい方法もあるでしょうが、主要なコーディング上の疑問には答えられるのではと思っています。
目次
- 第1章 数値関数
- N01 πを得る
- N02 eを得る
- N03 ラジアンを角度に変換する
- N04 角度をラジアンに変換する
- N05 絶対値を計算する
- N06 整数のビット長を返す
- N07 10進数をN進数に変換する
- N08 10進数を2進数に変換する
- N09 10進数を16進数に変換する
- N10 10進数を16進数文字に変換する
- N11 N進数を10進数に変換する
- N12 真偽値を数値に変換する
- N13 空の値ならすべてnullと判断する
- N14 数値が整数なら真を返す
- N15 数字からカンマを外す
- N16 数値にカンマを挿入する
- N17 すべての数値を抜き出す
- N18 引数指定の方法ですべての値を抜き出す
- N19 小数点数を指定の桁数で丸める
- N20 Unixエポック時刻をISO 8601フォーマットに変換する
- 第2章 文字列関数
- S01 文字のUnicodeコードポイントを得る
- S02 Unicodeコードポイントから文字を得る
- S03 文字列の数値への変換
- S04 先頭を大文字にする
- S05 タイトル文字化する
- S06 文字列を逆順にする
- S07 大文字小文字を入れ替える
- S08 文字列を左揃えにする
- S09 文字列を右揃えにする
- S10 文字列の左右揃えを選択的にする
- S11 文字列を中央揃えする
- S12 左側の空白文字を取り除く
- S13 右側の空白文字を取り除く
- S14 左右の空白文字を取り除く
- S15 米国表記の日付を変換する
- S16 英国表記の日付を変換する
- S17 syslog形式のタイムスタンプを変換する
- S18 メール形式の日付を変換する
- S19 バージョン文字列をオブジェクトにする
- S20 IPv4アドレスか確認する
- S21 MACアドレスか確認する
- S22 HTTPヘッダをオブジェクトに変換する
- S23 文字列に色を付ける
- S24 JQ_COLORS環境変数を分解する
- S25 全角ASCII文字を半角に直す
- 第3章 配列関数
- A01 配列要素を2乗する
- A02 配列の要素同士を加算する
- A03 ドット積を求める
- A04 クロス積を求める
- A05 距離を求める
- A06 配列の組み合わせを取る
- A07 アルファベットの配列を生成する
- A08 配列に配列を挿入する
- A09 長い配列を分割する
- A10 ステップ幅のあるスライス
- A11 特定の要素の個数をカウントする
- A12 ネストされた配列に含まれた文字列の最大長を求める
- A13 文字列配列を大文字小文字関係なくソートする
- A14 配列の配列を表形式にする
- A15 テキストファイルを配列の配列にする
- A16 CSVファイルを配列の配列にする
- A17 配列をオブジェクトにする
- A18 2つの配列をオブジェクトにする
- A19 配列から検索結果の前後の要素を抜き出す
- 第4章 集合関数
- M01 集合を作成する
- M02 集合に要素を追加する
- M03 集合から要素を取り除く
- M04 和集合を求める
- M05 積集合を求める
- M06 差集合を求める
- M07 対称差集合を求める
- M08 部分集合かを判定する
- M09 上位集合かを判定する
- M10 互いに素かを判定する
- 第5章 統計関数
- E01 総和を求める
- E02 平均値を求める
- E03 中央値を求める
- E04 最頻値を求める
- E05 母分散を計算する
- E06 母標準偏差を計算する
- E07 標本不偏分散を計算する
- E08 標本標準偏差を計算する
- 第6章 オブジェクト関数
- O01 プロパティ名だけを再帰的に抜き出す
- O02 オブジェクトをプロパティ名と一緒に抽出する
- O03 プロパティの名前と値を入れ替える
- O04 プロパティ値をキーとしたオブジェクトを生成する
- O05 プロパティ名をオブジェクトに繰り込み、配列化する
- O06 指定のプロパティのないオブジェクトを抽出する
- O07 指定のプロパティのないオブジェクトを補完する
- O08 欠けているプロパティを見つける
- O09 プロパティ名の長さでソートする
- O10 入れ子オブジェクトの内側のプロパティ値でソートする
- O11 指定のプロパティ値だけを定数倍する
- O12 オブジェクトをCSV化する
- O13 CSVファイルをオブジェクトに変換する
- 第7章 SQL関数
- Q01 SELECT * FROM table;
- Q02 SELECT * FROM table ORDER BY column;
- Q03 SELECT * FROM table ORDER BY column DESC;
- Q04 SELECT columns FROM table;
- Q05 SELECT column * num FROM table;
- Q06 SELECT * FROM table WHERE column = value;
- Q07 SELECT * FROM table WHERE column IN (values);
- Q08 SELECT * FROM table WHERE column BETWEEN num1 AND num2;
- Q09 SELECT COUNT(*) FROM table;
- Q10 SELECT * FROM table1 UNION ALL SELECT * FROM table2;
- Q11 SELECT * FROM table1 INTERSECT SELECT * FROM table2;
- Q12 SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;
- Q13 DESC table; v
- Q14 INSERT INTO table VALUES(values);
- Q15 UPDATE table SET column1 = value1 WHERE column2 = value2;
- Q16 DELETE FROM table WHERE column = value;
- Q17 ALTER TABLE table DROP COLUMN column;
- Q18 ALTER TABLE table ADD COLUMN column DEFAULT value;
- Q19 DROP table;
- 第8章 アルゴリズム関数
- F01 九九の表
- F02 階乗(ループ版)
- F03 階乗(再帰版)
- F04 フィボナッチ数列(ループ版)
- F05 フィボナッチ数列(再帰版)
- F06 素数
- F07 π v03
- F08 e
- 第9章 その他関数
- T01 JSONではない入力を無視する
- T02 指定の行番号のみ処理する
- T03 環境変数でプロパティ名を指定する
- T04 オブジェクトを環境変数にする
- T05 コマンド引数からプロパティ名を指定する
- T06 ファイルに記述したパスから抽出する
- 付録
- 付録A 関数定義
- 付録B ビルトイン関数の用法
- 付録C 用語
- 付録D 特殊記号
- 付録E 関数リスト