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)