Software Design plus AWK実践入門
- 中島雅弘,富永浩之,國信真吾,花川直己 著
 - 定価
 - 3,278円(本体2,980円+税10%)
 - 発売日
 - 2015.5.26
 - 判型
 - B5変形
 - 頁数
 - 416ページ
 - ISBN
 - 978-4-7741-7369-6 978-4-7741-7422-8
 
概要
UNIX登場期から使われ続けているawkを習得すれば、ログデータや各種テキストデータから必要な情報を引き出すことができます。手軽なデータ解析、テキスト整形ツールとしての有用性はクラウド時代の今でも変わりありません。
本書は最新のgawk 4系に対応し、「awkをはじめて使う人から、プロのプログラマまで使っていただける」ことを目指した以下の目的でまとめています。
- awkと正規表現のリファレンスとしての活用
 - awkプログラミングをサポートするスクリプトライブラリ集
 - awkを使った問題解決の事例集
 
こんな方にオススメ
- コマンドラインインターフェイスを利用するすべてのエンジニア
 - ログをはじめとする各種テキストデータを手軽に分析したい方
 - awkを初めて使う方
 - プロのプログラマ
 
目次
第1章 awkとコマンドラインインターフェイス(CLI)
- 1.1 プログラミング言語awk
- awkの歴史
 - awkの種類
 
 - 1.2 コマンドラインインターフェイスを駆使してawkを使いこなす
- CLI
 - あなたとOSの仲立ち「SHELL」
 - コマンドの実行
 - コマンドの直列実行
 - 複数のコマンドをつなぐ「パイプ」
 - 入出力先を変更する「リダイレクト」
 - 画面で確認しながら、ファイルにも「リダイレクト」したいならtee
 - SHELLじゃなくて、awkに解釈してもらいたいところは「エスケープ」しよう
 
 - 1.3 コマンドラインツールいろいろ
- catでファイルの結合と出力
 - 行の並べ替えはsortにおまかせ
 - 重複行をまとめるuniq
 - wcで行、単語、文字を数える
 - 文字列検索のスペシャリストgrep
 - テキストストリームをまとめて加工sed
 - どのツールを使う?
 
 - 1.4 エディタを使ってスクリプトを書く
 - 1.5 bashのコマンドライン編集機能
 - Column
- もっとCLIを理解したい人へ
 - gawkのインストール
 
 
第2章 awkの言語仕様
- 2.1 awkの使い方
 - 2.2 言語の構造
 - 2.3 入力列の構造
- レコード
 - フィールド
 
 - 2.4 パターン
- [1]BEGINとEND
 - [2]BEGINFILEとENDFILE
 - [3]比較演算式と論理演算式
 - [4]正規表現
 - [5]パターンの範囲
 - [6]複合パターン
 
 - 2.5 アクション
 - 2.6 定数
 - 2.7 変数、型
 - 2.8 特別な変数
 - 2.9 配列
- [1]多次元配列
 - [2]配列要素の消去
 
 - 2.10 式、演算子
- [1]算術演算
 - [2]比較演算
 - [3]論理演算
 - [4]文字列演算子
 
 - 2.11 制御構造
- [1]順次構造
 - [2]選択構造 if構文
 - [3]選択構造 switch構文
 - [4]反復構造 while構文
 - [5]反復構造 do構文
 - [6]反復構造 for構文
 - [7]配列の要素を列挙するfor構文
 - [8]添字の順序の指定
 - [9]制御文 breakとcontinue
 - [10]制御文 nextとexit
 
 - 2.12 出力
- [1]print
 - [2]printf
 
 - 2.13 関数
- [1]数学関数
 - [2]文字列操作関数
 - [3]型関数
 
 - 2.14 ユーザー定義関数
 - 2.15 Indirect関数
 - 2.16 入力
 - 2.17 外部プログラムとの連携
 - Column
- 制御の流れ
 
 
第3章 正規表現
- 3.1 正規表現とは
- [1]正規表現とパターン
 - [2]文字と文字列
 - [3]正規表現の構文
 - [4]正規表現の流れ図
 
 - 3.2 正規表現式の演算
- [1]文字列の選択 選択 A|B
 - [2]文字列の連結 連結 AB
 - [3]あってもなくてもよい文字列 一項選択 A?
 - [4]文字列のグループ化 括弧 (A)
 - [5]文字列の正の繰り返し 正閉包 A+
 - [6]空列を含む繰り返し 閉包 A*
 - [7]指定された回数の繰り返し {n, m}
 
 - 3.3 文字の指定
- [1]何にでもマッチする文字 ワイルド文字 .
 - [2]特別な意味を持つ文字 メタ文字
 - [3]特別な文字を普通の文字に エスケープ \c
 - [4]普通には表せない文字 特殊文字
 - [5]新しい特殊文字 gawkのみで利用可能な特殊文字
 - [6]文字の範囲の指定 文字クラス [abc]
 - [7]文字の順序と範囲の指定 順序による指定 [a-c]
 - [8]文字クラスの表記法
 - [9]文字の範囲の除外 範囲の除外 [^abc]
 - [10]文字クラス中の特別な文字
 - [11]文字コードによる文字の指定 73、\x6a
 - [12]全角文字
 
 - 3.4 正規表現と文字列マッチング
- [1]正規表現の使い道
 - [2]awk中の特別な文字
 - [3]マッチングと一致列の位置
 - [4]入力列の位置指定
 - [5]マッチングで取り出される文字列 最左最長な一致列
 
 - 3.5 正規表現の作り方と使い方
- [1]応用例(1) 整数と実数
 - [2]応用例(2) 郵便番号と電話番号
 
 - Column
- 空式ε
 - 正規表現の等式クイズ
 - 正規表現の仕様:POSIXとLSB
 - 文字列の否定
 - 正規表現のすごろくゲーム
 
 
第4章 awkスクリプト集
- 4.1 1行スクリプト(ワンライナー)
- [1]表示する行の指定
 - [2]表示する行の範囲の指定
 - [3]空白行の削除
 - [4]連続する同じ行の削除
 - [5]ファイルを読み込んだ後の処理
 - [6]行やフィールドの個数
 - [7]行やフィールドの番号付け
 - [8]ある文字列を含む行やフィールドの個数
 - [9]ある文字列にマッチするフィールドの検索
 - [10]数値フィールドの総計
 - [11]フィールド単位の加工
 - [12]フィールドや行の順序をひっくり返して表示
 - [13]1行の出力幅の指定
 - [14]マッチングによる文字列の置換
 - [15]エスケープ・シーケンスを用いた文字列の置換
 - [16]区切りの変更
 - [17]アイテムが重複している行を抽出する
 
 - 4.2 文字列操作関数
- [1]文字列の挿入と削除
 - [2]文字列の繰返しと裏返し
 - [3]アスキーコードへの変換
 - [4]文字の置換
 
 - 4.3 ユーザー定義の数値処理関数
- [1]最大公約数
 - [2]ランダム整数列の発生
 - [3]四捨五入
 - [4]秒数を時間単位に変換
 - [5]曜日の算出
 - [6]階乗
 - [7]数式への代入
 - [8]数式の定数倍
 - [9]数式の加法
 - [10]数式の乗法
 
 - 4.4 入出力補助関数
- [1]オプション指定値の読み込み
 - [2]一時ファイル名の作成
 - [3]カラー出力
 
 - 4.5 レコードとフィールドの処理
- [1]ファイルの先頭部分と末尾部分
 - [2]フィールドの出現回数
 - [3]フィールドの配列への格納
 - [4]フィールドの整形出力
 - [5]フィールド配列の二段出力
 
 - 4.6 基本的なテキスト処理
- [1]テキストの大きさ
 - [2]記号の出現回数
 - [3]タブとスペースの変換
 - [4]1行の長さをそろえて表示
 - [5]行番号と桁番号の表示
 
 - 4.7 数表の処理
- [1]n進数の変換
 - [2]集計(1)
 - [3]集計(2)
 - [4]フィールド値によるソート
 - [5]クイックソート
 - [6]マージソート
 
 - 4.8 複雑な正規表現の生成
- [1]文字列自身を表す正規表現
 - [2]正規表現式の連結と繰返し
 - [3]文字列の先頭部分と巡回
 
 - 4.9 正規表現の拡張マッチング関数
- [1]最左最短マッチング
 - [2]連続マッチング(1)
 - [3]連続マッチング(2)
 
 - Column
- クイックソートのアルゴリズム
 - マージソートのアルゴリズム
 
 
第5章 awkの活用
- 5.1 文字列のデータ収集と統計処理
- [1]awkで暗号解読支援
 - [2]ローリングハッシュによる文字列の部分一致
 - [3]編集距離による文字列の類似度
 - [4]少しランダムな整数列の生成
 - [5]マルコフ情報源によるランダム文字列の生成
 
 - 5.2 データベース管理
- [1]カレンダー
 - [2]住所録
 - [3]小遣い帳
 - [4]連想配列による集合演算
 - [5]レコード形式とCSV形式のデータベース
 - [6]関係データベースのテーブルの結合
 - [7]買い物かごの分析
 
 - 5.3 サーバー管理とログ解析
- [1]Webサーバーのログの解析
 - [2]SNSのデータ分析
 
 - 5.4 組み合わせの計算と位相グラフのデータ構造
- [1]関数のグラフ
 - [2]順列と組み合わせの列挙
 - [3]正整数の分割の列挙
 - [4]木構造の算法とディレクトリ構造への応用
 - [5]有向グラフの隣接行列
 - [6]ダイクストラ法によるネットワークの最短経路
 
 - 5.5 awkでパズルとゲーム
- [1]簡単な性格診断
 - [2]三目並べ
 - [3]ライフゲーム
 - [4]迷路の探索
 - [5]ソリティアの解法
 - [6]ナンバースライドの解法
 - [7]覆面算の解法
 
 - 5.6 英文テキストの処理
- [1]英文テキストのスタイル
 - [2]単語の検索
 - [3]文の検出
 - [4]正規表現のマクロ
 
 - 5.7 日本語テキストの処理
- [1]表形式での出力
 - [2]文書整形
 - [3]辞書による置換
 - [4]対話的な文字列の置換
 
 - 5.8 awkとプログラミング言語
- [1]言語の構文解析のレベル
 - [2]括弧の対応
 - [3]awkでlisp?
 - [4]後置記法の数式電卓
 
 - 5.9 1行エディタ
- [1]1行エディタの起動とコマンド入力形式
 - [2]1行エディタのコマンド
 - [3]使用例
 - [4]プログラムの解説と拡張の指針
 
 - Column
- 動的計画法
 - 編集距離と生命情報工学
 - マルコフモデルとマルコフ連鎖
 - 関係データベースの正規化
 - 階乗記数法と単純順列の列挙
 - awkプログラムを作るコツ
 - 前置記法と後置記法
 - スタックとキュー
 
 
付録 gawkクイックリファレンス
- A.1 gawkの実行方法
 - A.2 gawkで使用できるパターン
 - A.3 アクションの中で使用できる文
 - A.4 記号\でエスケープされた特殊文字
 - A.5 特別な意味を持つ変数
 - A.6 gawkで使える演算子
 - A.7 配列の開放
 - A.8 組み込み関数
 - A.9 gawkで定義済みのファイル名
 - A.10 gawkで使用する正規表現
 - A.11 数学定数
 - A.12 アスキーコード表
 
プロフィール
中島雅弘
著名、植村富士夫として1990年~1993年まで、情報系の雑誌で多数の連載を執筆。
1988年 立教大学理学部物理学科卒業
株式会社アスキー、株式会社スクウェア・エニックスなどを経て、現在 株式会社アーヴァイン・システムズ 代表取締役
著書(いずれも著名:植村富士夫)
『エンジニアーズUNIX』(SoftBank, 1991年10月)
『Cのオモチャ箱』(SoftBank, 1992年5月)
『awk でプログラミング』(オーム社, 1993年5月, 共著者:現香川大学准教授 富永浩之)
アブストラクトゲームの作家として、ゲームを考案。
「ゲーム学会第7回ゲーム作品コンペ優秀賞」
「BoardGameGeek BEST COMBINATORIAL 2-PLAYER GAME OF 2014 最優秀作品」
料理を作るのが好き。プロの料理人を自宅に招いて、自分の料理を食していただく「釈迦に説法の会」なる悪趣味がある。
富永浩之
1993年 京都大学大学院理学研究科数理解析専攻 博士課程単位取得退学 理学修士
2012~2015年 東京工業大学大学院社会理工学研究科人間行動システム専攻
1993年 香川大学経済学部情報管理学科 講師
1998年 香川大学工学部電子・情報工学科 准教授 現在に至る
情報系分野の教育支援システムの開発と運用を研究テーマとする。インドネシア(スラバヤ)や中国(長春)での教育プロジェクトに参加。高大連携の出張講座や放送大学の面接授業も担当(レゴプログラミング、論理思考)。料理を食べるのも作るのも大好き。
國信真吾
2009年 香川大学大学院工学研究科修了 工学修士
大学時代は、富永研究室に在籍していた。現在 株式会社アーヴァイン・システムズ MISマネージャー。初めて触れたプログラミング言語はPerl。
花川直己
2012年 香川大学工学部電子・情報工学科入学
入学時にサークルSLP(プログラミング研究所)に入部する。現在は富永研究室に在籍し、教育支援システムの開発を研究テーマとする。高校在学中にプログラミングに出会い、大学入学後はネットワーク、サーバー関係に興味を持つ。各種の情報系コンテストにも参加している。趣味は音楽鑑賞で、自分もテューバという楽器をたまに吹く。