シェルスクリプトマガジン

test

プログラミング言語AWK

投稿日:2016.07.26 | カテゴリー: 推薦図書

1989年に初めての邦訳が刊行され、その後何回か絶版の憂き目にあいつつも、不死鳥のごとく蘇り、様々な出版社から復刊を果たしている「プログラミング言語AWK」。この度、awkファンの熱い声に支えられ、USP出版から3回目の復刊を果たします。
テキスト処理と演算に絶大な効果を発揮する「awk」は、開発当時の1970年代から、開発者たちによって「30年後に真価がわかるだろう」と予言されていたといいます。
本書は、テキスト処理スクリプト言語の原点「awk」開発者たちによる、多種多様な例題を収録した読み応えたっぷりの解説書です。この本でしか味わえない、原著の奥深さを味わってください。

目次

第1章 AWK入門

 1-1 手はじめに

  AWKプログラムの構造
  AWKプログラムの実行
  エラー

 1-2 単純な出力

  全部の行の印字
  特定の欄の印字
  欄の数のNF
  計算と印字
  行番号の印字
  文章の出力

 1-3 凝った出力

  欄の模様がえ
  出力の整列

 1-4 選択

  比較による選択
  計算による選択
  文の中身による選択
  パターンの組み合わせ
  データの検証
  BEGINとEND

 1-5 AWKによる計算

  数え上げ
  和と平均の計算
  文章の操作
  文字列の隣接
  最後の入力行の印字
  組み込み関数
  行数,単語数,文字数の数え上げ

 1-6 制御文

  If-Else文
  While文
  For文

 1-7 配列

 1-8 便利な「一行野郎」たち

 1-9 お次は何?

 

第2章 AWK言語

  入力ファイルcontries
  プログラムの書式

 2-1 パターン

  BEGINとEND
  パターンとしての式
  文字列照合パターン
  正規表現
  複合パターン
  範囲を示すパターン
  パターンのまとめ

 2-2 アクション

  式
  制御文
  空文
  配列

 2-3 ユーザ定義関数

 2-4 出力

  print文
  出力区切子
  printf文
  ファイルへの出力
  パイプへの出力
  ファイルとパイプの閉鎖

 2-5 入力

  入力区切子
  副行レコード
  getline関数
  コマンド行での変数への代入
  コマンド行引数

 2-6 他のプログラムとの組み合わせ

  system関数
  AWKプログラムをシェル・コマンドに

 2-7 まとめ

 

第3章 データ処理

 3-1 データ変換と導出

  コラムの和
  百分率と分位の計算
  コンマつきの数
  固定欄入力
  プログラムの相互参照検査
  書式付出力

 3-2 データの検証

  対応の取れた区切り子
  パスワード・ファイルの検査
  データ検証プログラムの生成
  どっち版のAWK?

 3-3 BUndleとunbndle

 3-4 複行レコード

  空行で区切られたレコード
  複行レコードの処理
  ヘッダとトレイラつきのレコード
  名前と値からなるデータ

 3-5 まとめ

 

第4章 レポートとデータベース

 4-1 レコードの生成

  単純なレポート
  もう少し複雑なレポート

 4-2 パッケージ化された質問とレポート

  定型書簡

 4-3 関係データベース・システム

  自然和
  relfile
  AWKもどきの問い合わせ言語q
  qからawkへの翻訳プログラムqawk

 4-4 まとめ

 

第5章 語句処理

 5-1 文章の無作為生成

  無作為選択
  決まり文句の生成
  乱れ文

 5-2 対話的文章操作

  能力テスト:算数
  能力テスト:クイズ

 5-3 文章処理

  単語の数え上げ
  文書整形
  相互参照の一貫性保持
  KWIC検索の生成
  索引の生成

 5-5 まとめ

 

第6章 小さな言語

 6-1 アセンブラとインタープリタ

 6-2 グラフ生成言語

 6-3 整列生成プログラム

 6-4 逆ポーランド電卓

 6-5 普通の電卓

 6-7 まとめ

 

第7章 アルゴリズムの実験

 7-1 整列

  挿入法
  分割法
  整列2分木法

 7-2 輪郭分析

 7-3 位相整列

  広さ優先の位相整列
  深さ優先の探索
  深さ優先の位相整列

 7-4 Make:ファイル更新プログラム

 7-5 まとめ

 

第8章 エピローグ

 8-1 言語としてのAWK

 8-2 効率

 8-3 結論

 

付録A AWKのまとめ

 

付録B 演習問題回答

伽藍とバザール

投稿日:2016.07.26 | カテゴリー: 推薦図書

Linux、オープンソース(OSS)関係者必読の書。OSSソフトウェア開発の実態と、そのコミュニティ、そしてハッカーたちの価値観を、オープンソースのエバンジェリスト、ESRことエリック・スティーブン・レイモンドが可視化する。
なぜハッカーたちは無償でソフトウェア開発に携わるのか? Linuxが成功した理由とは? OSSの所有権とは? OSSとコミュニティを理解するために避けて通ることができない一冊です。
※本書は1999年に出版されたものを、USP出版より再出版したものです。

目次

第1章 伽藍とバザール

 1 伽藍方式とバザール方式
 2 なにはともあれメールは通せ
 3 ユーザは大事な財産
 4 はやめのリリース、しょっちゅうリリース
 5 バラがバラでないのは?
 6 Popclient からFetchmail へ
 7 Fetchmail の成長
 8 続・Fetchmail の教訓
 9 バザール方式の前提条件とは
 10 フリーソフト/オープンソースの社会的な意義
 11 マネジメントとマジノ線について
 12 謝辞
 13 もっと考えたい人のための文献リスト
 14 エピローグ:Netscape もバザール方式を受け入れる
 15 原注
 

第2章 ノウアスフィアの開墾

 1 そもそもの矛盾
 2 ハッカーイデオロギーのさまざま
 3 放縦な理論と純潔な実践
 4 所有権とオープンソース
 5 ロックと土地所有権
 6 贈与経済としてのハッカー文化
 7 ハッキングのよろこび
 8 評判のさまざまな相貌
 9 所有権と評判によるインセンティブ
 10 エゴの問題
 11 謙虚さの美徳
 12 評判ゲームモデルが持つ分野全体としての意義
 13 どれほどすばらしい贈り物?
 14 ノウアスフィア的所有権となわばりの動物行動学
 15 紛争の原因
 16 プロジェクト構造と所有権
 17 紛争とその解決
 18 文化への順応過程とアカデミズムとの関連
 19 結論:慣習から慣習法へ
 20 これからの研究の課題
 21 原注、書誌
 22 謝辞
 

第3章 魔法のおなべ

 1 魔法と区別がつかない
 2 贈与するおたくたちを超えて
 3 製造業的な誤解
 4 「情報はフリーになりたがっている」というのはウソだ。
 5 逆転した共有地
 6 ソース非公開にする理由
 7 利用価値による開発費用手当
 8 販売価値の困るところ
 9 間接販売価値モデル
 10 オープンにするとき、クローズドにするとき
 11 オープンソースのビジネス生態学
 12 成功に対処する
 13 オープンR&D とパトロン制の再発明
 14 目標到達までの道のり
 15 結論:革命のあとの人生
 16 謝辞
 17 補遺:なぜドライバをクローズドにするとベンダーは損をするのか
 

第4章 エリック・S・レイモンド大いに語る

 

第5章 ノウアスフィアはぼくたちの開墾を待っている

 

第6章 訳者あとがき

覚えて便利 いますぐ使える! シェルスクリプトシンプルレシピ54

投稿日:2016.07.26 | カテゴリー: 推薦図書

シェルスクリプトを習得するにあたって、越えなければならないいくつかの壁があります。
本書は、変数、数値、文字列、ファイル操作…様々な局面において壁にぶつかったとき、それを乗り越えるための本質的な回答を54本収録したレシピ集です。
本書には、初心者を卒業し、シェルスクリプトの匠を目指す人であれば学んでおきたいノウハウが、薄い本の中にこれでもか!と詰まっています。
収録されている54のレシピを習得すれば、シェルスクリプトの世界がそれを足がかりに広がっていくことを感じられるはずです。
シェルの深みを知り、より高みを目指したいあなたにこそ、手にとっていただきたい一冊です。

目次

第1章 基本的な作業

レシピ1-1 C言語のようなforループ
レシピ1-2 C言語のようなforループ―その2―(ムダ知識編)
レシピ1-3 誤作動しない正しい文字列評価のしかた
レシピ1-4 対話的な入力受けつけ
レシピ1-5 標準エラー出力を使うプログラムの扱い
レシピ1-6 標準エラー出力を自ら使う

第2章 変数操作

レシピ2-1 変数名の記述ミスへの対策
レシピ2-2 変数を未定義化する
レシピ2-3 変数が未定義かどうか判別する
レシピ2-4 子プロセスへの変数渡し
レシピ2-5 親プロセスへの変数渡し
レシピ2-6 配列変数を使う
レシピ2-7 連想配列を使う

第3章 数値操作

レシピ3-1 Basic並の高度な計算をする
レシピ3-2 四捨五入する
レシピ3-3 乱数を得る
レシピ3-4 10進数⇔16進数および10進数⇔8進数変換
レシピ3-5 10進数⇔2進数変換
レシピ3-6 数字として扱える文字列かどうかの判定

第4章 文字列操作

レシピ4-1 文字列の長さを知る(len)
レシピ4-2 文字列の一部を抽出する(left$,mid$,right$)
レシピ4-3 大文字⇔小文字変換
レシピ4-4 ASCIIコード⇔キャラクタ変換(asc,chr$)
レシピ4-5 正規表現でマッチした文字列の取り出し
レシピ4-6 特定文字のトリミング
レシピ4-7 パス名中のファイル名・ディレクトリ名を抽出する
レシピ4-8 ランダムな文字列の作成

第5章 フィールド・ライン処理

レシピ5-1 コマンド引数を処理する
レシピ5-2 最後からn番目のフィールドを得る
レシピ5-3 特定の業を出力する
レシピ5-4 1行ごとに処理をする―その1―
レシピ5-5 1行ごとに処理をする―その2~4―
レシピ5-6 並べ替え(ソート)をする
レシピ5-7 CSV形式のデータの処理
レシピ5-8 1列ごとに処理をする

第6章 ファイル操作

レシピ6-1 詳細なファイル情報を知る
レシピ6-2 タイムスタンプを変更する
レシピ6-3 指定ディレクトリ以下のファイルの総サイズを知る
レシピ6-4 指定ディレクトリ以下の特定のファイルを操作する
レシピ6-5 安全にテンポラリファイルを作る
レシピ6-6 デッドリンク(無効なシンボリックリンク)を消す
レシピ6-7 外部ファイルのヒアドキュメント

第7章 システム情報収集

レシピ7-1 OSの種類を知る
レシピ7-2 自分のファイルパスを知る
レシピ7-3 自分のプロセスIDを知る
レシピ7-4 現在のプロセス数を知る
レシピ7-5 自ホストのIPアドレスを知る
レシピ7-6 絶対パスを知る
レシピ7-7 多重起動チェック

第8章 デバッグに役立つレシピ

レシピ8-1 実行の様子をトレースする
レシピ8-2 デバッグメッセージを分離する
レシピ8-3 パイプ(標準入出力)の中身を覗き見る
レシピ8-4 パイプ(標準入出力)をゆっくり流す

第9章 シェルスクリプトの応用例

実践ユニケージ開発手法02 シェルスクリプト学習編

投稿日:2016.07.26 | カテゴリー: 推薦図書

本書は、独特な方法でシステムを構築するユニケージ開発手法の基本を理解し、習得するための実践教材です。
対象となる読者は、基本的なUNIX/Linux の知識(端末、コマンド、ファイルの概念、パスなど)があること、 また、「ユニケージ開発手法01 コマンド学習編」の内容を理解している方です。
ここでは、「コマンド学習編」で学んだコマンドを組み合わせて、データ処理を行うシェルスクリプトの作成に必要なbashの文法や機能について学習し、ユニケージの作法にしたがってシェルスクリプトでプログラミングを行う練習も行います。

目次

第1章 はじめに

1.1 通常のプログラミングとの違い

第2章 シェルスクリプト

2.1 シェルスクリプトの書き方と役割
2.2 ちょっとしたルール

第3章 ファイル展開(ワイルドカード)

第4章 ブレース展開

第5章 リダイレクト

5.1 ファイル記述子
5.2 記号

第6章 追記・ヒアドキュメント

第7章 パイプ(パイプライン)の動作

第8章 シェル変数

8.1 定義と代入
8.2 変数の生存期間
8.3 予約シェル変数・特殊なシェル変数
8.4 配列
8.5 コマンド置換

第9章 クォートとエスケープ

第10章 終了ステータスとパイプステータス

第11章 AND演算子とOR演算子

第12章 テストコマンド(test, [)

12.1 テストコマンドの書式
12.2 テストコマンドの機能
12.3 PIPESTATUSとエラー処理

第13章 制御構文

13.1 if文
13.2 for文
13.3 while文
13.4 case文
13.5 パイプでつなげたwhile文、for文は要注意!

第14章 帳票出力(ITEMRANKING)

14.1 ディレクトリとデータ準備
14.2 データを見る
14.3 出力のイメージ
14.4 シェルスクリプトの記述
14.5 引数の受け入れ
14.6 項目間演算

第15章 POMPAの作成(POMPASAKUSEI)

15.1 想定するアプリケーション
15.2 データ
15.3 URIAGE_TENPO
15.4 URIAGE_HINBETU
15.5 【TRY】

第16章 時系列データの帳票(BUMONTREND)

16.1 記述
16.2 解答例

第17章 履歴マスタの扱い

17.1 販売履歴(HANBAI_RIREKI)
17.2 実装

実践ユニケージ開発手法01 コマンド学習編

投稿日:2016.04.19 | カテゴリー: 推薦図書

本書は、独特な方法でシステムを構築するユニケージ開発手法の基本を理解し、習得するための実践教材です。

対象となる読者は、基本的なUNIX/Linux の知識(端末、コマンド、ファイルの概念、パス、標準入出力、リダイレクションなど)がある方です。

ここでは、ユニケージ開発手法において使用頻度の高いコマンドの使い方、とくに、高速なテキスト検索ができるgrep コマンド、テキスト置換ができるsed コマンド、高度なテキスト処理ができるawk コマンドをはじめとした基本的なUNIX コマンド、usp Tukubai コマンド(ユニケージコマンド)について詳しく解説します。豊富な練習問題で効果的にコマンド操作を体得できます。

目次

第1章 はじめに

1.1 コマンドの機能と役割
1.2 凡例

第2章 AWK

2.1 AWKとは何か
2.2 手を動かす
2.3 フィールド・レコード/パターン・アクション
2.4 レコードの選択
2.5 文字列の出力
2.6 演算
2.7 三項演算子
2.8 変数
2.9 BEGINパターン、ENDパターン
2.10 便利な関数
2.11 AWKの制御文

第3章 sort, msort*, uniq

3.1 sort
3.2 msort
3.3 uniq

第4章 head, tail, ctail*, gyo, retu*

4.1 head・tail
4.2 ctail
4.3 gyo
4.4 retu

第5章 self*, delf*

5.1 フィールド形式とキー
5.2 selfによるフィールドの並び替え
5.3 delfによる

第6章 sm2*, sm4*, sm5*

6.1 sm2
6.2 sm4
6.3 sm5

第7章 ysum*, kasan*, ratio*

7.1 ysum
7.2 kasan
7.3 ratio

第8章 join0*, join1*, join2*, loopj*

8.1 マスタとトランザクション
8.2 join0
8.3 join1
8.4 join2
8.5 loopj

第9章 getfirst*, getlast*, up3*

9.1 getfirst, getlast
9.2 up3

第10章 tarr*, yarr*

10.1 基本的な使い方
10.2 応用

第11章 count*, juni*

11.1 count
11.2 juni

第12章 map*, tateyoko*

12.1 フィールド形式ファイルのxy展開
12.2 より複雑な展開

第13章 marume*, divsen*, comma*, keta*

13.1 marume
13.2 divsen
13.3 comma
13.4 keta

第14章 grepと正規表現

14.1 grep
14.2 正規表現

第15章 tr, sed, calsed*, fsed*

15.1 tr
15.2 sed
15.3 calsed
15.4 fsed

第16章 han*, zen*

第17章 mojihame*

第18章 keycut*

第19章 その他コマンド

19.1 mdate
19.2 dayslash
19.3 lcalc
19.4 nkf, iconv
19.5 tagシリーズ

Cプログラム高速化研究班

投稿日:2016.03.30 | カテゴリー: 推薦図書

プログラムの背後で、CPUはどのような働きをしているのでしょうか?本書はその原理と仕組みを簡単な実験で確かめ、コードを研ぎすます方法を紹介します。

【著者あとがきより】
高速なプログラムが求められる場面は少ないながらも厳然として存在し、いざ性能が必要になったときに対応できる技術者が非常に少なくなっているのが気がかりです。特に、業務システムなどの数値演算系以外の分野では、絶滅危惧種と言ってよいのではないでしょうか。
その原因のひとつは、高級言語と統合開発環境の普及によって、機械命令レベルのプログラム実行を意識しなくてもすむようになっていることです。どのように実行されるかを意識しないので、実行コストが高い処理が平気で使われています。もうひとつの原因は、アルゴリズムに対する理解不足です。
開発するプログラムが高度化、パターン化してきているため、アルゴリズムについて学ぶ機会がなくなっているのではないでしょうか。
本書は、プログラムを高速化する個々の方策を並べるのではなく、方策を見つけるための道筋を示すように心がけました。

目次

序章 高度に進んだ技術は魔法と見分けがつかない

1章 CPUとコンパイラについてちょびっと

1.1 高速道路と横断歩道
1.2 コンパイラは何をしているのか
 コンパイル後のアセンブリ言語プログラムを覗く
 最適化オプションを付けるとどうなるか
1.3 CPUは何をしているのか
 命令セットアーキテクチャとマイクロアーキテクチャ
 命令はどのように実行されるのか
 命令パイプライン
 キャッシュメモリ
 もっとキャッシュ
 キャッシュブロックの置換アルゴリズム
 スーパースカラ実行
[1章は重箱の隅なのか]

2章 実行コストの感覚を身につける

2.1 プログラムの実行コスト
2.2 計る・測る・謀る
 本書のアプローチ
2.3 ベンチマークテストプログラムの最適化を防ぐ
 操作の「おまとめ」を防ぐ
 初期値設定の最適化を防ぐ
 単純な繰り返し操作の最適化を防ぐ
 本書のベンチマークテストプログラム
2.4 検証――遅いのはどの操作?
2.5 基本の加算と代入
 単純な代入(レジスタ間の転送)
 単純な代入(データの競合がある場合)
 定数の代入
 変数どうしの加算
 変数に定数を加算
2.6 乗算は遅い
 変数どうしの乗算
 変数に定数を乗算
2.7 除算はとっても遅い
 変数で除算(レジスタどうしの演算)
 定数2、4で除算
 2のべき乗以外の定数で除算
 符号なし整数の場合はどうか
 2のべき乗で除算するときはシフト演算がお得
2.8 メモリへのアクセス
 小さい配列へのアクセス(狭い範囲のメモリ操作) 
 大きい配列へのアクセス(広い範囲のメモリ操作)
 デスクトップ向けCPUとの比較
2.9 コンディションで差がでる条件分岐
 else節のないif文
 else節のあるif文
2.10 32/64ビット環境で違う関数呼び出し
2.11 実験のまとめ
[愛がほしくば愛を差し出せ]

3章 遅いのはどこか

3.1 gprofを使ったプロファイリング
 gprofの使い方
3.2 何がどれだけ時間を喰っているか
 ライブラリ関数のプロファイルも取得する
 時間喰いの関数たち
 ライブラリ関数の呼び出し回数を表示させるには
3.3 何が何を呼び出しているか
3.4 プロファイリングの仕組み
3.5 そのほかのプロファイラ
[達人の技を伝える教育システム]

4章 達人の方法論

4.1 達人はどこに目をつけるか?
 ハードウェア編
 コンパイラ/ミドルウェア編
 アルゴリズム編
4.2 [ハードウェア編]配列とキャッシュメモリの活用
 行列の積を計算する
 配列操作の順番を入れ替える
 ループを展開する
 行列のタイリング
4.3 [ライブラリ編]遅い関数をめぐる紆余曲折
 なぜstrcmp関数は遅いのか
 最適化の落とし穴
4.4 [ハードウェア編]SIMDを用いた文字列比較
4.5 [ライブラリ編]入出力方法いろいろ比べ
 行データの入力方法を比べる
 出力方法はどうだろう
 パイプ入出力の特殊事情
 パイプ入出力 vs. ファイル入出力
4.6 [アルゴリズム編]バイナリサーチと平衡二分探索木
 大量データのソート
[そこまでやる? ね、ね、そこまでやるの?]

5章 コンパイラを骨までしゃぶる

5.1 レベル分けされている最適化オプション
 GCCの最適化オプション
 「最適化なし」はデバッグに役立つ
 未定義動作がないことを想定しているレベル2以上の最適化
5.2 最適化・レジスタ・外部変数
5.3 共通部分式削除を知ってプログラムすっきり
5.4 ポインタと強度低減
5.5 インライン関数でユーザー関数も展開
[他人に差をつけろ!]

6章 業務システム向けのヒント 137

6.1 ソートと文字列操作をねらえ
6.2 小数点数の計算と文字列/数値の変換
 ブロック入出力とフィールド分割
 小数部付きの数を集計する
 整数を文字列に変換する
 パフォーマンスチューニングの結果
6.3 半角文字から全角文字への変換
 文字のバイト数を判別する
 ASCII文字と半角カナ文字の判別
 ASCII文字から全角文字への変換
 半角カナから全角文字への変換
 パフォーマンスチューニングの結果
 文字のバイト数を調べる別の方法
 より道UTF-8
6.4 データの特性を利用した配列の探索
 データの特性を考慮する
 バイナリサーチとリニアサーチを組み合わせた照合
 パフォーマンスチューニングの結果
[あとがきに代えて]

ユニケージ言論

投稿日:2016.03.30 | カテゴリー: 推薦図書

アジャイルでもない、ウォーターフォールでもない…、シェルスクリプトとテキストデータ、そしてオリジナルのコマンドを組み合わせ て、従来の数十倍の開発スピードで企業の基幹システムを構築する「ユニケージ開発手法」。これまで十数年間ベールに包まれていた本開発手法を解説した初の 論文集が出版されます。
その圧倒的な柔軟性、スピード、コスト削減効果で、注目を集めている本開発手法について、考案者、ユーザ、研究者が、それぞれの立場から、技術の概略、特徴、従来の開発手法との比較を論じます。
「システムは業務にある。コンピュータは道具にすぎない」
「業務のつながりは、人のコミュニケーション」
「データは更新しない、発生データは捨てないで整理集約しておけばよい」等々、本開発手法を表現した数々の言葉は、従来型の開発に携わるエンジニアにとっても、得るものが多いはずです。

目次

序 新しい開発手法への期待 前川 徹(サイバー大学)

第1章 ユニケージとは何か 當仲 寛哲(USP研究所)

1.1 ユニケージの外見
1.2 ユニケージの世界観
1.3 ユニケージのデータ論
1.4 ユニケージによる開発・運用
1.5 ユニケージ文化:コンピューティングと心

第2章 ユニケージは道具である 山崎 裕詞(良品計画)

2.1 「情シス」という仕事
2.2 システム開発における価値の根拠
2.3 システムの内製化へ
2.4 ユニケージとの出会い
2.5 ユニケージの「ミラクル」
2.6 良品計画とユニケージの現在

第3章 ユニケージは方法論である 熊谷 章(TAO BEARS)

3.1 技術革新への途
3.2 ユニケージの分析と評価
3.3 UNIXシステムとデータベースシステムの再考

第4章 ユニケージは正解である 熊野憲辰(ゼリア新薬)

4.1 ユーザサイドから見たIT 基盤・産業論
4.2 ユーザサイドから見たシステム
4.3 ユニケージへの期待と評価

第5章 ユニケージはコミュニケーションである 木ノ下 勝郎(ライブスペックRFP研究所)

5.1 業務のつながりは人のコミュニケーション
5.2 テキスト処理だけで全部仕事ができた
5.3 データは更新しない、発生データは捨てないで整理集約しておけばよい
5.4 データの管理方式とデータ名称の付け方

-->