移動先 先頭, , , 末尾 セクション, 目次.

awkを実行する

awkの呼び出しでは、陽にプログラムを与えるものと、 一つ以上のプログラムファイルを指定するものの二種類がある。 以下にこれら両方のテンプレートを挙げる。 このテンプレートで`[...]'に囲まれたアイテムは 省略可能である

POSIXスタイルの伝統的な一文字オプションに加えて、 gawkではGNUのロングオプションをサポートしている。

awk [options] -f progfile [--] file ...
awk [options] [--] 'program' file ...

awkを空のプログラムと共に起動することが可能である。

$ awk " datafile1 datafile2

このようなことをすることにはあまり意味がない。awkは 空のプログラムが与えられた場合には 単になにもいわずに終了する(d.c.)。 `--lint'がコマンドラインで指定された場合、gawkは プログラムが空であることに対して警告を発する。

コマンドラインオプション

オプションはマイナスサインで始まり、それに一文字のキャラクタが続く。 GNUスタ イルのロングオプションは二つのマイナスサインとそれに続く(ほかのオプションと 区別できるところからは省略可能な)キーワードから構成される。オプションが引数 を取る場合、キーワードに続いてイコール記号(`=')を続けその後ろに引数を記 述する。簡潔にするため、伝統的な短いオプションに関してのみ参照する。しかし、 ロングオプションとショートオプションはいつでも交換可能である。

gawkのロングオプションはPOSIXスタイルのオプションに適合する。オプショ ンと、その意味するところは次に挙げる通り。

-F fs
--field-separator fs
変数FSfsをセットする (セクション フィールドの分割方法の指定を参照)。
-f source-file
--file source-file
awkプログラムが最初の非オプション引数ではなく、source-fileで あることを示す。
-v var=val
--assign var=val
プログラムの実行開始前に、変数var の値としてvalを セットする。(セットされた)変数の値は、 BEGIN ブロック中で も有効となる(セクション Other Command Line Argumentsを参照)。 `-v'オプションは、一つの変数に対してだけしかセットできないが、このオプ ションを複数回指定して、それぞれ別の変数に対してセットすることができる。例え ば`awk -v foo=1 -v bar=2 ...'のように。
-mf NNN
-mr NNN
幾つかのメモリ制限の値をNNNにする。`f'フラグは フィールドの最大長をセットし、`r'フラグは レコードの最大サイズをセットする。これら二つのフラグと`-m' オプションは、ベル研究所バージョンのUNIX上のawkから のものである。これらは互換性のために提供されたもので、 gawkではこのようなあらかじめ定まった制限が存在しないので、 これらのオプションは無視される。
-W gawk-opt
POSIX の標準にしたがって、処理系固有のオプションを-Wオプションに対する 引数として提供する。 これらの引数はカンマか空白によって区切られる。 これらのオプションが解析される際には大小文字は無視される。 これらのオプションはGNUスタイルのロングオプションとしても使うことがで きる。gawkで使うことのできるオプションは少し後に一覧がある。
--
コマンドラインオプションの終端を示す。以後に続く引数は、`-'で始まるもの であってもオプションとして扱われない。この`--'の扱いは POSIX の引数解析 のコンベンションに従ったものである。 この指定をすることにより、`-'で始まるファイルを使用できるようになり、ま たシェルスクリプト中で、(そのスクリプトを使う)ユーザーが `-'で始まる ファイル名を使用できるようになる。

gawk特有のオプションは以下の通り。

-W traditional
-W compat
--traditional
--compat
互換モード(compatibility mode)を指定し、 awkに対するGNUの拡張を禁止する。このため、 gawkはベル研究所バージョンのawkのように振る舞う。 `--traditional'はこのオプションの好ましいフォームである。 拡張に関しては セクション POSIX awkにはないgawkの拡張を参照. にまとめられており、 セクション 互換性とデバッグを参照. も参照のこと。
-W copyleft
-W copyright
--copyleft
--copyright
General Public Licenseのショートバージョンを出力し、実行を終了する。 このオプションは将来はなくなるだろう。
-W help
-W usage
--help
--usage
gawkが受け付ける短いオプション、長いオプションを簡単に まとめて"使い方"のメッセージを出力し、実行を終了する。
-W lint
--lint
他のawk処理系で動作するかわからないような記述に対して警告を発する。 一部の警告はgawkがプログラムを読みこんだときに、その他の 警告はプログラムを実行したときに出力される。
-W lint-old
--lint-old
オリジナルの、UNIX Version 7版awkで使用できないような 機能に対して警告を出す。 (セクション Major Changes between V7 and SVR3.1を参照)。
-W posix
--posix
POSIX 互換モードを指定してgawk特有の拡張機能を無効にし (ちょうど`--traditional'のように)、さらに以下の制限を加える。 `--traditional'`--posix'を同時にコマンドライン 上で指定した場合、`--posix'が優先される。 gawkはこれらが同時に指定された場合には 警告を発する
-W re-interval
--re-interval
正規表現内でのinterval expression (セクション 正規表現演算子を参照) の使用を許可する。 interval expressionが伝統的なawkでは使えないものであるので、 gawkでは、 これを使うことによって古いawkプログラムが誤動作してしまう 怖れがあるので、デフォルトではこの機能を提供しない。
-W source program-text
--source program-text
awkプログラムのソースコードとしてprogram-textを使う。このオプシ ョンはコマンドライン上に置かれたソースコードとファイル中のソースコードを 一緒に使うことを許し、特にコマンドライン上のプログラムからライブラリ関数を 使うときに便利である (セクション AWKPATH環境変数を参照)。
-W version
--version
(セクション 問題やバグの報告を参照). 使っているgawkのバージョン情報を出力する。 これは、Free Software Foundationの最新配布と比較して、使っている gawkをアップデートする必要があるかどうかを決めるのに使うことが できるし、バグレポートの際に便利である。 (セクション 問題やバグの報告を参照).

他のオプションは不正なものであると警告が発せられるが、 無視される(エラーで終了するようなことはないということ)。

互換モードでは特例として、`-F'オプションの指定で設定されたfs`t'であったとき、FSはタブキャラクタ("\t")がセットさ れる。これは`--traditional'が指定されたときのみ有効で、`--posix' が指定されている場合はこのような動作はしない (セクション フィールドの分割方法の指定を参照)。

`-f'オプションはコマンドラインで複数回使うこともできる。 このような場合、gawkはすべてのprogram-fileファイルから プログラムを読み込み、あたかも一つの大きなファイルにまとめたかのように する。便利な関数は一度だけ記述して標準的な場所から取り出すようにし、 個々のプログラムからインクルードする

ターミナルからプログラムをタイプする場合でもライブラリ関数を使うことがで き、そうするためには`-f /dev/tty'を指定する。awkawk は、awkプログラムの一部としてターミナルからファイル読み込みをおこ なう。プログラムをタイプしおわった後で、control-d(ファイルの終端を 示すキャラクタ。MS-DOSではcontrol-z)をタイプして入力を終了する(同 様に、データの入力元として標準入力を使うこともできる)。

ファイルにあるawkプログラムとコマンドライン上のawkプログラ ムを混ぜて使うための標準的なawkの機構は不格好なものであるので、 gawkでは`--source'オプションを提供している。これは標準入力を あなたの書いたプログラムのためにpre-emptにすることを要求するようなことは なくて、そして、簡単にコマンドライン上のプログラムとライブラリ中のプログ ラムを混ぜて使うことを許すのである (セクション AWKPATH環境変数を参照)。

`-f'オプションも`--source'オプションも指定されていない場合、 gawkは非オプションのコマンドライン引数のうち、最初のものをプロ グラムのテキストとみなす。

POSIXLY_CORRECTという環境変数が存在した場合、 gawkはコマンドラインオプションで`--posix'を指定したかのように、 厳密なPOISXモードで動作する。 多くのGNUプログラムは厳密なPOSIXモードで動作するのに この環境変数を参照する。`--lint'をコマンドラインで 指定すると、gawkPOSIXLY_CORRECTのために POSIXモードになり、その後でPOSIXモードが有効であるとの 警告メッセージを出力する。

この変数の設定はシェルのスタートアップファイルで行うのが 一般的だろう。BashのようなBシェル互換のシェルの場合、 これは次のような行をホームディレクトリの`.profile' というファイルに追加すればできる。

POSIXLY_CORRECT=true
export POSIXLY_CORRECT

Cシェル互換のシェル(あまり勧めないが)の場合は、 次のような行をホームディレクトリの`.login'というファイルに 追加することでできる。

setenv POSIXLY_CORRECT true

Other Command Line Arguments

コマンドライン上の他の引数は、コマンドライン上の順番で 入力ファイルとして処理される。しかし、引数が var=valueという形式であった場合には、 これはvalueという値をvarにセットする代入として 扱われ、ファイル指定とはみなされない。

これらすべての引数は、awkプログラムの配列変数ARGV (セクション 組み込み変数を参照)を構成する。 コマンドラインオプションとプログラムテキスト(もしあれば)はARGVに は含まれない。他のすべての引数は、変数代入も含めて、ARGVの要素に 含まれる。ARGVの各要素は処理され、gawkはその時点で処理し ているARGVの要素のインデックスをARGINDという変数に処理する。

ファイル名引数と、変数代入引数の違いは、awkが次の入力ファイルを オープンしようとしたときに明確になる。実行時に、"ファイル名"をそれが 実際には変数代入でないかどうかをチェックする。もし、変数代入であれば、 awkはファイルからの読み込みではなく、変数の代入を行うのである。

したがって、この変数は(コマンドライン上で)先行するファイルの読み込み がすべて行われたあとで、与えられた値を受け取ることになる。特に このやり方で値を設定されている変数は、 awkが引数リストを走査する前にBEGINルールが 実行されるためにBEGINルールの中で(その値を)参照することはできない。 (セクション 特殊パターンBEGINENDを参照)。

コマンドライン上で与えられた変数の値はエスケープシーケンス 処理が実行される(d.c.)(セクション エスケープシーケンスを参照)。

初期のawk処理系の一部では、変数代入がすべてのファイル名の 前にあったときに、その代入をBEGINルールが実行される前に 行っていた。awkの振る舞いはこのために一貫性を欠いていた。 つまり、一部のコマンドライン上の代入はBEGINルール の内側にあるかのように扱われたが、そうでないものもあった。 しかし、一部のアプリケーションはこの"仕様"に依存していた。 awkがより一貫性を持つように変更されたとき、 `-v'オプションがこのような古い動作を前提としていた アプリケーションに適応させるために追加された。

変数代入の機能は、 データファイルを走査する前に RSOFSORSのような変数に代入して 入出力の書式を制御するのに便利である。 同様に、あるデータファイルを複数回読んで処理するときの 状態を制御するのにも便利である。例えば、

awk 'pass == 1  { pass 1 での仕事 }
     pass == 2  { pass 2 での仕事 }' pass=1 mydata pass=2 mydata

変数代入の機能があるので、FSに値をセットする`-F'オプションは 必要というわけではない。これは歴史的な互換性のために残されている。

AWKPATH環境変数

以前のセクションで、awkプログラムファイルの名前をコマンドライン上 の`-f'オプションで指定できることを説明した。大部分のawk処理 系では、指定するプログラムファイルがカレントディレクトリにない限りは、そ のファイルのパス名を記述しなければならない。

しかしgawkでは、`-f'オプションで与えられている ファイル名が`/'を含んでいない場合には、 ディレクトリリスト(検索パス(search path)と呼ばれる) にあるディレクトリに指定されたファイルがあるかを 一つ一つ検索していく。

検索パスはコロンで区切られたディレクトリ名からなる文字列である。@code {gawk}はAWKPATHという環境変数からサーチパスを取得する。もし、この 環境変数が定義されていなければ、gawkはデフォルトのパス `.:/usr/local/share/awk'を使用する (18) (システム管理者のために作成されたプログラムは変数AWKPATHが カレントディレクトリ(`.'を含んでいない状態で使用するべきである)。

検索パスの機能は、特に便利なawk関数のライブラリの作成に有効である。 ライブラリファイルを標準的なデフォルトパスに置くことができ、コマンドライ ンではそれを短い名前で指定することができる。さもなければ、ライブラリの各 ファイルを指定するのにその名前をフルパスで書かなければならないだろう。

`--source'オプションと`-f'オプションの両方を使うことによって、 コマンドライン上にあるあなたのawkプログラムは awkライブラリファイルを便利に使うことができる セクション awkの関数ライブラリを参照。

パスの検索はgawkが互換モードで実行されているときには 行われない。これは`--traditional'`--posix'の ときも同様であるセクション コマンドラインオプションを参照。

注意: もしカレントディレクトリにあるファイルを見つけるようにし たいのであれば、検索パスにカレントディレクトリを含める必要がある。それに は、陽に`.'を含めたパスを指定するか、パスに空のエントリを含めるかを する(空のエントリはパスの先頭か末尾にコロンを置くか、`::'のように二 つのコロンを連続して置くことで作成できる)。もしカレントディレクトリが検 索パスに含まれていなければ、カレントディレクトリにあるファイルは見つから ない。パスの検索機構はシェルのそれと同じである。

Version 3.0以降、環境にAWKPATHが存在しない場合gawkENVIRON["AWKPATH"]にデフォルトの検索パスをセットするようにな った。これは。gawkが使うだろう検索パスの決定を簡単にする。

Obsolete Options and/or Features

このセクションでは、以前のバージョンのgawkでは使うことのできた 機能やコマンドラインオプションと、現在使用可能だが 使わないほうが良い(次のリリースではなくなるだろう ということ)機能やコマンドラインオプションについて説明する。

gawkのバージョン3.0.4 では、 以前のバージョンのgawkに対して、使えなくなった機能や 使えなくなったコマンドラインオプションはない。 このセクション は本質的にプレースホルダーであり、 幾つかのオプションは将来のgawkでは 削除される。

ドキュメント化されていないオプションと機能

Use the Source, Luke!
Obi-Wan

このセクションは意図的に空白にしている。

ルーク、ソースを読むんだ!

Known Bugs in gawk


移動先 先頭, , , 末尾 セクション, 目次.