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

組込み変数

大部分のawkの変数はユーザが好きに使うことができる。そういった変数は自 分で代入をしない限り値が変わるようなことはないし、プログラムに対して何か影響 を与えるということもない。

組み込み変数の一部はawkが自動的にその値を評価する。そのような変数を操 作することによって、 awkプログラムの動作を操作することが可能である。 他の組み込み変数はawkがその値を自動的にセットする。それを参照すること によってプログラム中でawkがどのように働いているのかについて情報を得る ことができる。

この章ではgawkの組み込み変数について説明する。組み込み変数の多くは、 それが実際に使われている章でも説明されている。

awkを制御する組込み変数

以下のリストは、変更することによりawkの挙動を変更することのできる 変数のリストである。

CONVFMT
この変数に格納されている文字列は数値から文字列に変換する際に awkが使用する (セクション 文字列と数値の変換を参照)。 この変数は参照されたときに、sprintfの第一引数であるような効果を持つ。 デフォルトでは"%.6g"という値になっている。 CONVFMTは POSIX の標準によって導入された。
FIELDWIDTHS
これは gawkに対して、固定したカラム境界で入力を扱うように指示するカラ ムのリストで、リストの個々の要素はスペースで区切られている。また、これはまだ 実験的な機能であり、改良中である。 FIELDWIDTHSに対する代入はフィール ド分割の為のFSの使用をオーバーライドする。より詳しくは、 セクション 固定長データの読み込みを参照. 互換モードでgawkが起動された場合 (セクション awkの起動を参照)、FIELDWIDTHSは 特別な意味を持たず、フィールド分割の処理はFSの値によってのみ 行われる。
FS
FSは入力フィールドセパレータである (セクション フィールド分割の指定を参照). その値は一文字の文字列、もしくは複数の文字で構成される正規表現 で、入力レコードをフィールドに分割するときの分割部分にマッチする。 デフォルトの値は" "で、一つのスペースからなる文字列である。例外と して、この値は連続しているスペース、タブを一つのセパレータとして認識させ、行 の先頭や終端にあるスペース、タブの連続を無視させる。 `-F'オプションを使うことにより、コマンドライン上で FSの値を変更 することが出来る。
awk -F, 'program' input-files
gawkがフィールド分割をFIELDWIDTHSを使用して行っているときに FSに値を代入すると、gawkは通常の正規表現によるフィールド分割を 行う状態に戻る。
IGNORECASE
IGNORECASEが0以外であるときに、全ての正規表現は大小文字を無視 してマッチングが行われる。 `~'`!~'を使った正規表現のマッチング。 また、 gsub,index,match, split ,subといっ た関数は全て大小文字を無視して正規表現のマッチングを行う。 ノート:組み込み変数FSの値によってフィールド分割を行っていると きは、(フィールド分割のための)正規表現オペレーションは常に大小文字を無視し た状態で行われている セクション 大小文字を意識した照合を参照. gawkが互換モード (セクション awkの起動を参照)で動作しているときは、 IGNORECASE は特別な意味を持たず、正規表現は常に大小文字を区別して マッチングが行われる。
OFMT
この文字列はawkprint文で出力を行うときに、数値を文字列に変 換するときの動作を制御するのに使用される(セクション 文字列と数値の変換を参照) 。この変数は参照されたときに、sprintfの第一引数であるよ うな効果を持つ。デフォルトでは"%.6g"という値になっている。初期の awkではOFMTを、数値から文字列に変更するような全ての式で書式を 特定するために使っていたが、その役割は現在ではCONVFMTが果たしている。
OFS
出力フィールドのセパレータ(セクション 出力セパレータを参照)。 print文を使ったときにフィールドとフィールドの間に出力される。 デフォルトは" "(一つのスペースからなる文字列)である。
ORS
出力レコードのセパレータ。 print文で出力したときに最後に(付加されて) 出力される。デフォルトは改行コード一つからなる文字列である("\n"とい う文字列)。 (セクション 出力セパレータを参照.)
RS
これはawkに対する入力のレコードセパレータである。デフォルト値は改行キャ ラクタである。つまり、デフォルトでは入力レコードはテキスト中の一行である (セクション 入力のレコードへの分割を参照.)
SUBSEP
SUBSEPは添字を区切るものであり、そのデフォルトの値は"\034"であ る。この値は多次元配列の名前を分割するために使われる。したがって foo[12,3]と記述すると、実際はfoo["12\0343"] にアクセスする (セクション 多次元配列を参照).

情報を提供する組込み変数

以下のリストはawkによって自動的にセットされ、プログラム中で情報を得る ことのできる変数のリストである。

ARGC
ARGV
コマンドライン引数はARGVという名前の配列に格納されていて awkプ ログラムから扱うことができる。 ARGCは与えられたコマンドライン引数の数 が格納されている セクション awkの起動を参照. ARGVの要 素は0からARGC - 1まで入っている。たとえば、
awk 'BEGIN {
       for (i = 0; i < ARGC; i++) 
           print ARGV[i] 
     }' inventory-shipped BBS-list
この例ではARGV[0] には "awk"が、ARGV[1]には "inventory-shipped"が、そしてARGV[2] には"BBS-list"がそ れぞれ格納されている。このとき、ARGCは3で、ARGVの最後の要素の 添字より1大きいが、これは添字が0から始まっているからである。 ARGC という変数と、0からARGC - 1までの要素を持つ配列変数は C言語でのコマンドライン引数に対するアクセスの方法から導入された。 awk プログラムそのものはARGVの要素には含まれておらず、他にもコ マンドラインオプションとその引数も要素に含まれていない。しかし、コマンドライ ン上での変数の代入は引数として扱われ、配列変数ARGVの中にある。 プログラム中でARGCと、ARGVの要素を変更することができる。 awkは入力ファイルが終端に達する度に、次の入力ファイルとして ARGVの次の要素を入力ファイルのファイル名として扱う。 (ARGVの要 素に)違った文字列をセットすることにより、プログラムが読み込むファイルを変更 することができる。ここで標準入力を指示するために"-"を使うことができる。 また、(ARGVに)新たに要素を加え、ARGCをインクリメントすることに よって、読み込むファイルを増やすことができる。 ARGCの値を小さくすると、リストの最後にある入力ファイルがリストから除 去される。プログラム中で元々のARGCの値を記憶しておくことにより、除去 された引数をファイル名以外のものとして扱うことができる。 リストの途中からファイルを除去するには、空文字列("")を ARGVの 除去したいファイルの場所に格納すればよい。特別な機能で、awkは空文字列 に置き換えられたファイル名を無視する。
ARGIND
現在処理しているARGV配列中のファイルのインデックス。 gawkが新 しいファイルを処理するためにオープンするごとに、 ARGINDARGV中にあるファイル名のインデックスをセットする。したがって、 `FILENAME == ARGV[ARGIND]'は常に真である。 この変数はファイル処理に便利である。データファイルのリスト中でリスト中のどこ のファイルであるかを知ることができるし、コマンドライン上で同じ名前で指定され ている複数のインスタンスを区別することができる。 awkプログラム中でARGINDの値を変更することができ、それにより gawkは自動的に次のファイルをオープンするときに新しい値をセットする。 この変数はgawkの拡張である。ほかのawkでは特殊変数ではない。
ENVIRON
環境変数の値で構成される配列である。配列は環境変数の名前で添字付けされる。要 素の値は各環境変数の値である。例えば、 ENVIRON["HOME"]の値は `/u/close'である。この配列の要素を変更しても awkがリダイレクショ ンやsystem関数で起動する他のプログラムに渡される環境変数そのものには 影響しない(これは将来のgawkでもこのように動作する)。 一部のオペレーティングシステムでは環境変数を備えていないものがある。 このようなシステムの場合、配列ENVIRONは空である。
ERRNO
getlineのリダイレクト、getlineでの読み込み、 closeでシ ステムエラーが発生したときにERRNOにはエラーを表わす文字列がセットされ る この変数はgawkの拡張である。ほかのawkでは特殊変数ではない。
FILENAME
この変数にはawkが現在読み込んでいるファイルのファイル名がセットされて いる。 awkが標準入力から(言い替えればコマンドラインでファイル名が与 えられていなければ)入力を行っている場合には FILENAME"-"が セットされる。 FILENAME は新しくファイルが読み込まれる度に変更される (セクション 入力ファイルの読み込みを参照).
FNR
FNRには、現在処理しているファイルでの、カレントレコードの番号が セットされている。FNRはレコードの入力の度に更新される (セクション getlineを使った入力を参照)。 入力ファイルが新しくなる度に0に初期化される。
NF
NFにはカレントレコード中のフィールドの数が格納されている。 NF はレコードの入力が行われて新しいフィールドが作られたとき、もしくは$0 が変更される度に更新される (セクション フィールドの検査を参照)。
NR
この変数にはプログラムが実行開始してからそれまでに入力されたレコードの数が格 納されている。 (セクション 入力のレコードへの分割を参照). NR は新しいレコードが入力される度に更新される。
RLENGTH
RLENGTHにはmatch関数でマッチした部分文字列の長さが格納されてい る (セクション 組込みの文字列操作関数を参照). RSTARTmatch関数を起動するとセットされ、マッチする部分文字列 があればその部分文字列の長さが、ない場合には-1が格納される。
RSTART
RSTARTmatch 関数でマッチした部分文字列の最初のキャラクタの インデックスが入る (セクション 組込みの文字列操作関数を参照). RSTARTmatch関数を起動するとセットされ、マッチする部分文字列 があればその開始位置が、ない場合には0が格納される。

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