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

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
変数FSfsをセットする (セクション フィールド分割の指定を参照)。
-f source-file
--file=source-file
awkプログラムが最初の非オプション引数ではなく、 source-fileであることを示す。
-v var=val
--assign=var=val
変数var の値としてvalをセットする。これは、プログラムの実行が開 始される以前に行われる。(セットされた)変数の値は、 BEGIN ブロック中で も有効となる。 (see below for a fuller explanation). `-v'オプションは、一つの変数に対してだけしかセットできないが、このオプ ションを複数回指定して、それぞれ別の変数に対してセットすることができる。例え ば、`-v foo=1 -v bar=2'
-W gawk-opt
POSIX の標準にしたがって、-Wオプションの引数をgawkに適用する。 これらの引数は、カンマか空白によって区切られる。解析の際には大小文字は無視さ れる。これらのオプションはGNUスタイルのロングオプションとしても使うことがで きる。gawkで使うことのできるオプションは以下の通り。
-W compat
--compat
gawk 特有の拡張機能を禁止し、UNIX上のawkと同じ様に動作させる 互換モードを指定する。 セクション 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 posix
--posix
厳格に POSIX に従って動作するモード。このオプションはcompat オプショ ンと同様に gawkの拡張機能を使用不能とし、さらに以下の使用不能項目が追 加される。
  • エスケープシーケンスで\x を認識しない。 (セクション 定数式を参照).
  • キーワードfunctionの略語として、funcを認めない。 (セクション 関数定義のシンタクスを参照).
  • `**'演算子と`**='演算子をそれぞれ`^'`^='の代りに 使うことを禁止する。(セクション 算術演算子を参照, とセクション 代入式を参照).
  • コマンドラインで`-Ft'と指定されたときに、その値をFS に タブコードとしてセットしない。 (セクション フィールド分割の指定を参照).
コマンドラインで`-W compat' オプションと`-W posix'オプションを同時 に指定すると`-W posix'が優先される。
-W source=program-text
--source=program-text
プログラムをprogram-textから入力するように指定する。このオプションは コマンドライン上で書いたプログラムと一緒に使っても良い。これはコマンドライン 上で書いたプログラムからライブラリ関数を呼ぶようなときに便利であろう。 (セクション 環境変数AWKPATHを参照)
-W version
--version
gawkのバージョン情報を表示する。 これは、(自分の持っているものと)Free Software Foundationから配布されている 最新のものとの比較の為にあるもので、将来のバージョンでは削除されるだろう。
--
コマンドラインオプションの終端を示す。以後に続く引数は、`-'で始まるもの であってもオプションとして扱われない。この`--'の扱いは POSIX の引数解析 のコンベンションに従ったものである。 この指定をすることにより、`-'で始まるファイルを使用できるようになり、ま たシェルスクリプト中で、(そのスクリプトを使う)ユーザーが `-'で始まる ファイル名を使用できるようになる。
この他のオプションは無効なものであると警告メッセージが出力されるが、 無視される。 特別な場合として、コンパチビリティモード時に`-F'オプションでfs の 値として`t'が指定されると、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 ルール中では有効とならず、 (セクション スペシャルパターンBEGINENDを参照), それから、引数リストを検査する前に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からのオプションは認 識しない。

`-c'
`-W compat' を代りに使うこと。
`-V'
`-W version' を代りに使うこと。
`-C'
`-W copyright' を代りに使うこと。
`-a'
`-e'
このオプションは"unrecognized option"のエラーメッセージを表示させるが、 gawkの実行には影響しない。POSIXの標準での伝統的なawkの 正規表現に対する扱いを明確にしている。

strftimeのパブリックドメインバージョン(gawkと一緒に配布されて いる) は、gawkの2.14 releaseの為に修正されている。 VMSフォーマットの 日付の生成を指定するのに使う`%V'`%v'に変更されている。これは POSIX によって`%V'による変換指定が、 dateユーティリティと同一に するという指定に定められているからである。 セクション タイムスタンプを扱う関数を参照.

Undocumented Options and Features

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

ソースを読め、ルーク!(5)


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