もしあなたが多くのコンピュータユーザと同じように、さまざまなテキストファイル
をある特定のパターンが見付かったところで変更することをしなければならないとか、
特定の行からデータを取り出してそのほかの部分は捨ててしまうといったことを繰り
返し行なわなければならないのであれば、 CやPascalのようなプログラミング言語で
そのようなプログラムを書くのは手間も時間もかかる。それはawk
を
使えば簡単にできるだろう。
awk
ユーティリティはほんの2、3行で単純なデータの整形を簡単に
行なえるような特殊なプログラミング言語である。
GNU の実装による awk
は、gawk
と呼ばれ、
System V Release 4 version の awk
に対して完全上位コンパチブルである。
gawk
はまた、POSIX の定めた awk
言語の規定に対しても上位互換
である。これは、きちんと書かれたawk
のプログラムは
gawk
でも動作する。ということである。したがって、このマニュアルでは
gawk
と他の awk
との実装上の違いを述べるようなことは
しない。
などがある。
awk
という語は特定のプログラムを示していると同時にあなたが実行しよ
うとしているプログラムの言語を示している。気をつける必要がある場合には、
プログラムを"awk
ユーティリティ"と呼び、もう一方を"awk
言
語"と呼ぶ。gawk
という語はGNUプロジェクトが開発したawk
を表
している。このマニュアルの目的はawk
言語と、awk
ユーテ
ィリティの実行の仕方の両方を説明することである。
このマニュアルの主な目的はPOSIXの標準で定められているawk
の
機能を説明することである。それはある特定の実装やgawk
を説明してい
るときに行っている。その説明では同様に、gawk
と他のawk
の実
装との重要な差違を説明することを試みる。さらに、POSIX標準のawk
に
はないようなgawk
の機能を説明する。
このマニュアルはチュートリアルとリファレンスの両方の役目を果たすという 難しい立場のものであるが、もし、あなたが初心者ならば難しすぎると感じるような記 述の部分は好きに読み飛ばしてかまわない。そういった部分はエキスパートユーザー と、このマニュアルのオンラインInfo バージョンで参照されるためのものだからだ。
awk
プログラムという単語はあなたが
プログラミング言語awk
を使って作成したプログラムを指す。
awk
言語の感じを知るための便利な"一行野郎"は
(セクション 便利な一行野郎を参照)にある。
多くのawk
プログラムのサンプルがある
(セクション awk
の関数ライブラリを参照。また、
セクション 実用的な awk
プログラムを参照).
awk
言語全体はセクション gawk
に関するまとめを参照にクイックリ
ファレンスとしてまとめられている。もし記憶に曖昧なところがあって、ある特
定の機能を確かめたいときには参照して欲しい。
見慣れないような単語があった場合、用語集(セクション 用語集を参照)を参照してみて 欲しい。
ほとんどの例で、完全なawk
プログラムが挙げられるが、
一部の高レベルのセクションでは、説明している事柄の概念を説明する
awk
プログラムの一部分だけが挙げられている。
このマニュアル全体はawk
を知らない人のためのものであるが、
特に、POSIXのawk
に関する記述、
セクション awk
の関数ライブラリを参照.や
セクション 実用的な awk
プログラムを参照.
にあるサンプルプログラムは、
awk
のエキスパートに対しても興味深いものであるはずだ。
Who opened that window shade?!? Count Dracula
POSIXの標準(とThe Gawk Manual)までは、awk
の
多くの機能はほとんどドキュメント化されていないか、あるいは
あっても満足なものではなかった。このような機能の記述
(しばしば"dark corners"と呼ばれる)は、このマニュアルでは
"(d.c.)"をつけて説明されている。
これらの機能は"dark corner"が先頭にある索引項目でも確認できる。
このマニュアルはGNUのドキュメント整形言語であるTexinfoで記述されている。 単一のTexinfoソースは、印刷ドキュメントとオンラインドキュメントの両方を 作成するのに使われる。 このため、あなたがこれまで読んだ他の本とは多少 typographical conventionsが違っている。
サンプルの中で、あなたが実際にシェルのコマンドラインから 入力する行は、シェルの一次プロンプトや二次プロンプト (`$'と`>')を行の先頭に置いている。 コマンドの出力はその前に"-|"をつける。 大体はコマンドの標準出力を表わしている。 エラーメッセージや、その他のコマンドの標準エラー出力に 出力されるものはその前に"error-->"が付いている。 例を挙げると、
$ echo hi on stdout -| hi on stdout $ echo hello on stderr 1>&2 error--> hello on stderr
テキスト中では、コマンド名はthis font
のようなフォントで出力されていて、
コードセグメント全体は`like this'のように同じフォントで、さらにクォ
ートされる。何かを強調したときにはlike thisのように、特に強調
したい箇所はlike thisのようにされている。新しい単語が登場したと
き、通常はそれが定義され、このセンテンスで前に"定義"がでてきたの
と同じフォントで現れる。ファイル名は`/path/to/ourfile'のように表わ
される。
キーボードからタイプするキャラクタはlike thisのように見える。特に、 それが"コントロールキャラクタ"と呼ばれる場合には。コントロールキャラク タとは、CONTROLキーと別のキーを一度に押してタイプするものである。 例えば、Control-dは、最初にCONTROLを押し、押したままd キーを押す。そして、両方のキーを離すという手順をとる。
このマニュアルでの例の多くは、二つのサンプルデータファイルから入力を 取る。一番目は `BBS-list'と呼ばれるものであり、BBSのリストとその情報 が記述されているファイル。二番目のデータファイルは`inventory-shipped' と呼ばれるもので月毎の船積みの量が記述されているファイルである。 これらのファイルの各行には、一つのレコードだけが置かれている。
`BBS-list'中の各レコードは、BBSの名称とその電話番号、ボーレート、そし て運営時間を表すコードから構成される。最終カラムの `A'はBBSが終日運 営されていることを示し、同様に `B'は BBSの運営が夜間と、週末のみである ことを、 `C'は週末のみの運営である事を示す。
aardvark 555-5553 1200/300 B alpo-net 555-3412 2400/1200/300 A barfly 555-7685 1200/300 A bites 555-1675 2400/1200/300 A camelot 555-0542 300 C core 555-2912 1200/300 C fooey 555-1234 2400/1200/300 B foot 555-6699 1200/300 B macfoo 555-6480 1200/300 A sdace 555-3430 2400/1200/300 A sabafoo 555-2127 1200/300 C
二番目のデータファイルは、`inventory-shipped'と呼ばれるもので、 年間の積込量を記述したものである。 各レコードは、月と、緑色のかごの積込量、赤い箱の積込量、オレンジ色の バッグの積込量、そして青い包みの積込量、から構成されている。 ファイルには16のエントリがあり、ある年の12ヶ月と、その翌年の4ヶ月分の データが記述されている。
Jan 13 25 15 115 Feb 15 32 24 226 Mar 15 24 34 228 Apr 31 52 63 420 May 16 34 29 208 Jun 31 42 75 492 Jul 24 34 67 436 Aug 15 34 47 316 Sep 13 55 37 277 Oct 29 54 68 525 Nov 20 87 82 577 Dec 17 35 61 401 Jan 21 36 64 620 Feb 26 58 80 652 Mar 24 75 70 495 Apr 21 70 74 514