awkを実行する
awkの呼び出しでは、陽にプログラムを与えるものと、
一つ以上のプログラムファイルを指定するものの二種類がある。
以下にこれら両方のテンプレートを挙げる。
このテンプレートで`[...]'に囲まれたアイテムは
省略可能である
POSIXスタイルの伝統的な一文字オプションに加えて、
gawkではGNUのロングオプションをサポートしている。
awk [options] -f progfile [--] file ... awk [options] [--] 'program' file ...
$ awk " datafile1 datafile2
このようなことをすることにはあまり意味がない。awkは
空のプログラムが与えられた場合には
単になにもいわずに終了する(d.c.)。
`--lint'がコマンドラインで指定された場合、gawkは
プログラムが空であることに対して警告を発する。
オプションはマイナスサインで始まり、それに一文字のキャラクタが続く。 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 ブロック中で
も有効となる(セクション Other Command Line Argumentsを参照)。
`-v'オプションは、一つの変数に対してだけしかセットできないが、このオプ
ションを複数回指定して、それぞれ別の変数に対してセットすることができる。例え
ば`awk -v foo=1 -v bar=2 ...'のように。
-mf NNN
-mr NNN
awkから
のものである。これらは互換性のために提供されたもので、
gawkではこのようなあらかじめ定まった制限が存在しないので、
これらのオプションは無視される。
-W gawk-opt
-Wオプションに対する
引数として提供する。
これらの引数はカンマか空白によって区切られる。
これらのオプションが解析される際には大小文字は無視される。
これらのオプションはGNUスタイルのロングオプションとしても使うことがで
きる。gawkで使うことのできるオプションは少し後に一覧がある。
--
gawk特有のオプションは以下の通り。
-W traditional
-W compat
--traditional
--compat
awkに対するGNUの拡張を禁止する。このため、
gawkはベル研究所バージョンのawkのように振る舞う。
`--traditional'はこのオプションの好ましいフォームである。
拡張に関しては
セクション POSIX awkにはないgawkの拡張を参照.
にまとめられており、
セクション 互換性とデバッグを参照.
も参照のこと。
-W copyleft
-W copyright
--copyleft
--copyright
-W help
-W usage
--help
--usage
gawkが受け付ける短いオプション、長いオプションを簡単に
まとめて"使い方"のメッセージを出力し、実行を終了する。
-W lint
--lint
awk処理系で動作するかわからないような記述に対して警告を発する。
一部の警告はgawkがプログラムを読みこんだときに、その他の
警告はプログラムを実行したときに出力される。
-W lint-old
--lint-old
awkで使用できないような
機能に対して警告を出す。
(セクション Major Changes between V7 and SVR3.1を参照)。
-W posix
--posix
gawk特有の拡張機能を無効にし
(ちょうど`--traditional'のように)、さらに以下の制限を加える。
\x を認識しない(セクション Constant Expressionsを参照)。
FS is
equal to a single space.
functionの略語として、funcを認めない
(セクション Function Definition Syntaxを参照)。
FS に
タブコードとしてセットしない。
(セクション フィールドの分割方法の指定を参照).
fflush組込み関数をサポートしない
(セクション Built-in Functions for Input/Outputを参照)。
gawkはこれらが同時に指定された場合には
警告を発する
-W re-interval
--re-interval
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'を指定する。awkはawk
は、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'をコマンドラインで
指定すると、gawkはPOSIXLY_CORRECTのために
POSIXモードになり、その後でPOSIXモードが有効であるとの
警告メッセージを出力する。
この変数の設定はシェルのスタートアップファイルで行うのが 一般的だろう。BashのようなBシェル互換のシェルの場合、 これは次のような行をホームディレクトリの`.profile' というファイルに追加すればできる。
POSIXLY_CORRECT=true export POSIXLY_CORRECT
Cシェル互換のシェル(あまり勧めないが)の場合は、 次のような行をホームディレクトリの`.login'というファイルに 追加することでできる。
setenv POSIXLY_CORRECT true
コマンドライン上の他の引数は、コマンドライン上の順番で
入力ファイルとして処理される。しかし、引数が
var=valueという形式であった場合には、
これはvalueという値をvarにセットする代入として
扱われ、ファイル指定とはみなされない。
これらすべての引数は、awkプログラムの配列変数ARGV
(セクション 組み込み変数を参照)を構成する。
コマンドラインオプションとプログラムテキスト(もしあれば)はARGVに
は含まれない。他のすべての引数は、変数代入も含めて、ARGVの要素に
含まれる。ARGVの各要素は処理され、gawkはその時点で処理し
ているARGVの要素のインデックスをARGINDという変数に処理する。
ファイル名引数と、変数代入引数の違いは、awkが次の入力ファイルを
オープンしようとしたときに明確になる。実行時に、"ファイル名"をそれが
実際には変数代入でないかどうかをチェックする。もし、変数代入であれば、
awkはファイルからの読み込みではなく、変数の代入を行うのである。
したがって、この変数は(コマンドライン上で)先行するファイルの読み込み
がすべて行われたあとで、与えられた値を受け取ることになる。特に
このやり方で値を設定されている変数は、
awkが引数リストを走査する前にBEGINルールが
実行されるためにBEGINルールの中で(その値を)参照することはできない。
(セクション 特殊パターンBEGINとENDを参照)。
コマンドライン上で与えられた変数の値はエスケープシーケンス 処理が実行される(d.c.)(セクション エスケープシーケンスを参照)。
初期のawk処理系の一部では、変数代入がすべてのファイル名の
前にあったときに、その代入をBEGINルールが実行される前に
行っていた。awkの振る舞いはこのために一貫性を欠いていた。
つまり、一部のコマンドライン上の代入はBEGINルール
の内側にあるかのように扱われたが、そうでないものもあった。
しかし、一部のアプリケーションはこの"仕様"に依存していた。
awkがより一貫性を持つように変更されたとき、
`-v'オプションがこのような古い動作を前提としていた
アプリケーションに適応させるために追加された。
変数代入の機能は、
データファイルを走査する前に
RS、OFS、ORSのような変数に代入して
入出力の書式を制御するのに便利である。
同様に、あるデータファイルを複数回読んで処理するときの
状態を制御するのにも便利である。例えば、
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が存在しない場合gawkは
ENVIRON["AWKPATH"]にデフォルトの検索パスをセットするようにな
った。これは。gawkが使うだろう検索パスの決定を簡単にする。
このセクションでは、以前のバージョンのgawkでは使うことのできた
機能やコマンドラインオプションと、現在使用可能だが
使わないほうが良い(次のリリースではなくなるだろう
ということ)機能やコマンドラインオプションについて説明する。
gawkのバージョン3.0.4 では、
以前のバージョンのgawkに対して、使えなくなった機能や
使えなくなったコマンドラインオプションはない。
このセクション
は本質的にプレースホルダーであり、
幾つかのオプションは将来のgawkでは
削除される。
Use the Source, Luke! Obi-Wan
このセクションは意図的に空白にしている。
ルーク、ソースを読むんだ!
gawkFS(セクション コマンドラインオプションを参照)
の値を変更するためのもので、コマンドラインで変数の代入を行うことができる
ので必要というわけではない。これは以前のものとの互換性のために残してある。
gawkを実行したときとは違う実行結果になるかもしれない。
gawkがこれらのファイルを内部的に解釈したとき、それらに
対する出力、たとえば標準出力は`/dev/stdout'と同期をしている。
システムがこれらのファイルをサポートしているときには
出力は実際には異なるファイルに出力しているのである。
(セクション Special File Names in gawkを参照)。