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
このセクションは意図的に空白にしている。
ルーク、ソースを読むんだ!
gawk
FS
(セクション コマンドラインオプションを参照)
の値を変更するためのもので、コマンドラインで変数の代入を行うことができる
ので必要というわけではない。これは以前のものとの互換性のために残してある。
gawk
を実行したときとは違う実行結果になるかもしれない。
gawk
がこれらのファイルを内部的に解釈したとき、それらに
対する出力、たとえば標準出力は`/dev/stdout'と同期をしている。
システムがこれらのファイルをサポートしているときには
出力は実際には異なるファイルに出力しているのである。
(セクション Special File Names in gawk
を参照)。