awkの起動
awkを実行させるには二つの方法がある。一つは、陽にプログラムを一緒に置
くこと。もう一つは、一つ(あるいはそれ以上の)プログラムファイルを指定するこ
と。それぞれのやり方のテンプレートを挙げておく。ここで、テンプレート中の
`[...]'で囲まれている部分は省略可能である。
伝統的な一文字のPOSIXスタイルのオプションに加えて、 gawk はGNUのロン
グオプションをサポートしている。
awk [POSIX or GNU style options] -f progfile [--] file ... awk [POSIX or GNU style options] [--] 'program' file ...
オプションはマイナスサインで始まり、それに一文字のキャラクタが続く。 GNUスタ イルのロングオプションは二つのマイナスサインとそれに続く(ほかのオプションと 区別できるところからは省略可能な)キーワードから構成される。オプションが引数 を取る場合、キーワードに続いてイコール記号(`=')を続けその後ろに引数を記 述する。簡潔にするため、伝統的な短いオプションに関してのみ参照する。しかし、 ロングオプションとショートオプションはいつでも交換可能である。
gawkのロングオプションはPOSIXスタイルのオプションに適合する。オプショ
ンと、その意味するところは次に挙げる通り。
-F fs
--field-separator=fs
FSにfsをセットする
(セクション フィールド分割の指定を参照)。
-f source-file
--file=source-file
awkプログラムが最初の非オプション引数ではなく、
source-fileであることを示す。
-v var=val
--assign=var=val
BEGIN ブロック中で
も有効となる。 (see below for a fuller explanation).
`-v'オプションは、一つの変数に対してだけしかセットできないが、このオプ
ションを複数回指定して、それぞれ別の変数に対してセットすることができる。例え
ば、`-v foo=1 -v bar=2'。
-W gawk-opt
-Wオプションの引数をgawkに適用する。
これらの引数は、カンマか空白によって区切られる。解析の際には大小文字は無視さ
れる。これらのオプションはGNUスタイルのロングオプションとしても使うことがで
きる。gawkで使うことのできるオプションは以下の通り。
-W compat
--compat
gawk 特有の拡張機能を禁止し、UNIX上のawkと同じ様に動作させる
互換モードを指定する。
セクション POSIX awkにはないgawkの機能を参照,
拡張機能についてはセクション 上位互換性とデバッグを参照
を参照のこと。
-W copyleft
-W copyright
--copyleft
--copyright
-W help
-W usage
--help
--usage
gawkが受け付ける一文字オプション、ロングオプションの
"使い方"のメッセージを出力し、実行を終了する。
-W lint
--lint
awk 処理系に対して、ポータブルでなかったり、(動作するかどうか)
疑わしい構文に対して警告を表示する。一部の警告はgawkがプログラムを読
み込んだときに、そのほかの警告は実行時に出力される。
-W posix
--posix
compat オプショ
ンと同様に gawkの拡張機能を使用不能とし、さらに以下の使用不能項目が追
加される。
\x を認識しない。
(セクション 定数式を参照).
functionの略語として、funcを認めない。
(セクション 関数定義のシンタクスを参照).
FS に
タブコードとしてセットしない。
(セクション フィールド分割の指定を参照).-W source=program-text
--source=program-text
AWKPATHを参照)
-W version
--version
gawkのバージョン情報を表示する。
これは、(自分の持っているものと)Free Software Foundationから配布されている
最新のものとの比較の為にあるもので、将来のバージョンでは削除されるだろう。
--
FSにセットされる値はタブキャラクタ
("\t")となる。この動作は、`-W compat'が指定されたときにのみ行わ
れ、`-W posix' が指定されたときには行われない。
(セクション フィールド分割の指定を参照).
もし、`-f'が使われていないのであれば、最初のオプションでないコマンドラ
イン引数をプログラムテキストとして扱う。
`-f'オプションはコマンドライン中で複数回指定できる。 awkはそれら
のファイルをあたかも一つの大きなファイルであるかのように読み込む。これは、
awkの関数ライブラリを作成するのに便利だろう。(使いまわしの利く)便利
な関数を標準的な場所に置いて、そこから取り出すようにすることで、プログラムを
書く度にいちいちその中に取り込んで使うということをしないですむ。例えば、あな
たが`-f /dev/tty'と指定して、ターミナルから直接プログラムをタイプしたと
してもライブラリ関数を使うことはできるのだ。 awkは、ターミナルから読
み取ったものをawkプログラムの一部分として読み込む。プログラムの入力を
終了させるにはControl-d (ファイルの終了を示すキャラクタ)をタイプすれば
よい(`-f -'とすることでプログラムを標準入力から得ることができるけれ
ども、その代りにデータを標準入力から得ることができなくなる)。
こういったawkの使い方でコマンドライン上のawkプログラムとソース
ファイルを混ぜて使うようなやりかたは不格好なものであるので、gawkでは
`--source'オプションが加えられている。このオプションは標準入力をソース
コードのために使うことはないし、簡単にコマンドライン上のプログラムとライブラ
リを一緒に使うことが可能となる
(セクション 環境変数AWKPATHを参照)。
`-f' オプションも `--source'オプションも指定されなかった場合、
gawkは最初のオプション指定でない引数をプログラムのソーステキストで
あるとする。
コマンドライン上のその他の引数は通常の入力ファイルとして(指定された順序にし
たがって)処理される。しかし、var=valueという書式の引数は、
valueという値をvarという変数に設定するということを意味し、ファイ
ルとしては扱われない。
awkプログラムに対するこれらの引数は、awkプログラム中で配列変数
ARGV を参照することで扱うことが出来る。(セクション 組込み変数を参照)
コマンドラインオプションと、(もし与えられているのであれば)プログラムテキス
トは配列変数ARGVには格納されない。その他の引数は変数に対する代入も含
めて、全て格納される。
ある引数がファイル名を示したものなのか、変数の代入文であるのかの区別は
awkが次の入力ファイルをオープンしようとしたときに行われる。実行時に、
変数に対する代入文であるのかをファイル名のチェックで行う。もし代入文であった
なら、ファイルの読み込みではなく変数に対する代入が行われる。
そのゆえに、変数に特定の値が設定されるのは(コマンドラインで)前にあるファイル
全てが読まれた後のことになる。特に、このスタイルで設定された値がBEGIN
ルール中では有効とならず、
(セクション スペシャルパターンBEGINとENDを参照),
それから、引数リストを検査する前にBEGINルールが実行される。コマンドラ
インで与えられた値はエスケープシーケンスとして扱われる
(セクション 定数式を参照)。
初期における一部の処理系では、ファイル名より先に変数に対する代入
が書かれていたときに、BEGINルールを実行する前に代入が起きていた。
一部のアプリケーションは、この"仕様"に依存している。
awkがより首尾一貫した仕様に変更されたときに、`-v'オプションが
そのようなアプリケーションに対応するために追加された。
変数への代入機能は、 RS, OFS, ORSのような入出力をコント
ロールするような変数にデータファイルを実際に読み込む前に値をセットするような
場合に便利である。そして、あるファイルを複数回読み込んで処理するときに状態の制
御をするのに使用できる。例えば、
awk 'pass == 1 { pass 1 stuff }
pass == 2 { pass 2 stuff }' pass=1 datafile pass=2 datafile
変数への代入機能があるので`-F' オプションは特に必要というわけではないけ れども互換性のために残されている。
AWKPATH
前のセクションではコマンドライン上で`-f'オプションを使ってどのようにプ
ログラムファイルの名前を指定するかが記述された。一部のawkの実装
では、プログラムファイルの指定のときにそのファイルがカレントディレクトリ
にない限り、パス名もきちんと書く必要があるものある。
しかしgawkでは、サーチパスで指定されているディレクトリにプログラムが
あるのならば、`-f'でファイル名を指定するときに `/'を含めた名前で書
く必要はない。 gawkがサーチパスのディレクトリをひとつひとつ探していく
からだ。
gawkはこのサーチパスをAWKPATHという環境変数から取得する。もし、
この環境変数が定義されていなければgawkはデフォルトのサーチパスとして、
`.:/usr/lib/awk:/usr/local/lib/awk'
を使用する(システムの管理者は、このAWKPATH環境変数にカレントディレク
トリ `.'を含めるべきではない)。
このサーチパスの機能はユーザーが定義した関数のライブラリを作成しようとすると きには特に有用だろう。ライブラリファイルをデフォルトパスにある標準的なディレ クトリに置いておき、コマンドラインからは短いファイル名で指定できるということ ができる。しかし、ファイル名そのものはきちんとその名前を全部書かなければいけ ない。
`--source' オプションと `-f'オプションを組み合わせることによって
コマンドライン上のawkプログラムでawkライブラリファイル中の
ものを使うことができる。
gawkが互換モードで動作しているときは、パスのサーチは行われない。
`-W compat' オプションか`-W posix'オプションのどちらかが指定された
ときにこのような動作となる。
ノート:もし、カレントディレクトリにあるファイルを使いたければ、パスの エントリに`.'か、カレントディレクトリ、あるいは空のエントリを書き加えな ければならない(空のエントリはパスの最初か最後にコロンと一緒に置くか、 `::'の様にコロンを二つ続けて表現する)カレントディレクトリがパスに含ま れていなければ、カレントディレクトリにあるファイルは検索できない。このパスの 検索機構はシェルのものと同一である。
このセクションでは現在のバージョンのgawkでは使えなくなったり、
サポートはされているがあまり使うことが勧められない(次のリリースではサポート
されないであろう)コマンドラインオプションや機能について説明する。
gawkの Version 2.15では、以下に挙げるVersion 2.11からのオプションは認
識しない。
gawkの実行には影響しない。POSIXの標準での伝統的なawkの
正規表現に対する扱いを明確にしている。
strftimeのパブリックドメインバージョン(gawkと一緒に配布されて
いる) は、gawkの2.14 releaseの為に修正されている。 VMSフォーマットの
日付の生成を指定するのに使う`%V'は`%v'に変更されている。これは
POSIX によって`%V'による変換指定が、 dateユーティリティと同一に
するという指定に定められているからである。
セクション タイムスタンプを扱う関数を参照.
このセクションは意図的に空白にしてある。
ソースを読め、ルーク!(5)