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

gawk Summary

この付録にはgawkのコマンドラインと、gawk言語の要約がある。これ は"クイックリファレンス"としてデザインされたものである。簡潔ではあるけれど も抜けはない。

コマンドラインオプションのまとめ

コマンドラインはgawk自身へのオプションと、awkプログラムのテキ スト(`-f'オプションが指定されていない場合)、そしてあらかじめ定義されて いるawkの変数、 ARGCARGVに反映される値からなる。

awk [POSIX or GNU style options] -f source-file [--] file ...
awk [POSIX or GNU style options] [--] 'program' file ...

gawkは次のオプションを受け付ける。

-F fs
--field-separator=fs
入力フィールドセパレータとしてfsを使用する(FSの値を定義する)。
-f program-file
--file=program-file
awkプログラムを、コマンドライン上の最初の引数ではなく、 program-fileから読み込む。
-v var=val
--assign=var=val
プログラムの実行を開始する前に変数varvalという値をセットする。
-W compat
--compat
互換モードを指定し、gawk特有の拡張機能を無効にする。
-W copyleft
-W copyright
--copyleft
--copyright
標準エラー出力にGeneral Public Licenseのショートバージョンを出力する。 このオプションは将来はなくなるだろう。
-W help
-W usage
--help
--usage
使えるオプションについての簡単な説明エラー出力に出力する。
-W lint
--lint
他のawkに持っていくときに障害になりそうな記述に関して警告を与える。
-W posix
--posix
POSIX 互換モードを指定し、gawk特有の拡張機能を無効にする。また、それ に加えて制限の適用が行われる。
-W source=program-text
--source=program-text
awkプログラムのソースコードとしてprogram-textを使う。このオプシ ョンはコマンドライン上に置かれたソースコードとファイル中のソースコードを 一緒に使うことを許し、特にコマンドライン上のプログラムからライブラリ関数を 使うときに便利である。
-W version
--version
gawk のバージョン情報をエラー出力に表示する。 このオプションは将来のgawkではなくなるだろう。
--
オプションの終端を示す。(awkインタプリタではなく) awkプログラムに対して、`-'で始まる引数を渡すのに便利である。 これは主に POSIX でのコンベンションの引数解析に関係する。

上記のもの以外のオプションは無効であるが、無視される。 セクション awkの起動を参照.

言語のまとめ

awkプログラムは、パターン・アクションの並びと (省略可能な)関数の定義 から構成される。

pattern    { action statements }

function name(parameter list)     { action statements }

gawkは最初に、ソースプログラムをコマンドラインで指定されていれば program-file(s)から、そうでなければオプションでない最初の引数から読み 込む。 `-f'オプションはコマンドラインで複数回使うこともできる。 gawkはすべてのprogram-fileファイルからプログラムを読み込む(こ のとき、指定された順番通に行なわれる)。このような動作はawk関数のライ ブラリを作成するのに有効であり、新しくawkプログラムを書くたびにそういっ たライブラリを直接プログラム中にいちいち書かないで良い。コマンドライン上でタ イプされたライブラリ関数を使うには、コマンドライン上に`-f /dev/tty'を書 いてそのあとにプログラムをタイプし、 Control-dで終れば良い。 セクション awkの起動を参照.

環境変数AWKPATH`-f'で指定したファイルを探すパスを指定する。 AWKPATHがセットされていないときには、デフォルトのパスである `.:/usr/lib/awk:/usr/local/lib/awk'が使われる。 `-f' で指定したファイル名に`/'が含まれていた場合には、パスを使った サーチは行なわれない。 セクション 環境変数AWKPATHを参照.

gawkはプログラムを内部形式にコンパイルし、ARGVという配列中のファ イルから読み込みを行なう。もし、ファイルがコマンドラインで指定されていなけれ ば、gawkは標準入力から読み込みを行なう。

もしコマンドラインで "ファイル"が`var=val'という形であれ ば、それはvarvalを代入するという代入式として扱われる。 ARGVの ある要素が空文字列であれば、その要素はスキップされる。

入力の行ごとに、gawkawkプログラム中のパターンとマッチ するかをテストし、適用すべきアクションを実行する。

変数とフィールド

awkの変数は動的であり、最初に使用されるときに作り出される。その値は浮 動小数点数か文字列かのいずれかである。 awkはまた一次元の配列を持ち、 多次元配列をエミュレートする。 awkが実行時にあらかじめ決められた値を セットするようないくつかの変数があるが、それはこのあとで説明する。

フィールド

行が読み込まれるごとに、gawkは行をフィールドセパレータとして FSの値を使ってフィールドに分割する。 FSが一つのキャラク タであれば、フィールドはそのキャラクタで分割される。そうでない場合、 FSは正規表現であるとみなされる。特殊なケースとして、FSが一つの 空白であった場合、フィールドは空白とタブの何れか、あるいはその両方で分割され る。 IGNORECASE (セクション 大小文字を意識した照合を参照) の値はFSが正規表現であるときに、どのようにフィールドが分割 されるかに影響を与える。

入力行のフィールドはそれぞれ、その(入力行中の)位置で参照することができ、 $1, $2のように記述する。 $0は行全体である。フィールドの 値は代入することもできる。フィールド番号は定数でなくてもよい。

n = 5
print $n

これは入力行の5番目のフィールドを出力する。NFという変数には入力行にあ るフィールドの数がセットされる。

存在しないフィールド(たとえば$NF以降のフィールド)への参照は空文字列 が返る。しかしながら、存在しないフィールドへの代入(たとえば$(NF+2) = 5) は、NFの値を増加し、新しいNFと以前のNFの間にあるフィー ルドを空文字列をその値として作り出し、フィールドがOFSの値で区切られて いるとして $0の再計算を引き起こす。

セクション 入力ファイルの読み込みを参照.

組込み変数

awkの組み込み変数は以下の通り。

ARGC
コマンドライン引数の数(ただし、awkプログラムそのものや、オプションは 数に含まれない)。
ARGIND
現在処理しているARGVの要素へのインデックス。
`FILENAME == ARGV[ARGIND]'が常に成り立つ。
ARGV
コマンドライン引数の配列。配列の添え字は0からARGC - 1まで。 ARGVの内容を動的に変更する事によって、データとして使うファイルを制御 することができる。
CONVFMT
数値を文字列に変換するときに使われるフォーマット。
FIELDWIDTHS
固定長の入力データを記述する数字の、スペースで区切られたリスト。
ENVIRON
環境変数からなる配列。配列の添字は環境変数名で、配列要素の値は(添字に使われ ている)環境変数の値である。したがって、環境変数HOMEの値は ENVIRON["HOME"] とすることで取得できる。その値は`/u/close'といっ た形式であろう。 この配列を変更しても gawkがリダイレクションやsystem関数で起動 したプログラムが参照する環境変数には影響しない。 (これは将来のgawkで は変わるかもしれない) 一部のオペレーティングシステムでは環境変数がない。そういったシステムでは ENVIRONは実行時には空となる。
ERRNO
getlinecloseを実行したときに起きたエラーのシステムエラーメッ セージ。
FILENAME
現在の入力ファイルのファイル名。コマンドラインで入力ファイルの指定がされてい ないときは`-'が入っている。
FNR
現在の入力ファイルから入力したレコードの数。
FS
入力フィールドセパレータ。デフォルトではブランク。
IGNORECASE
正規表現オペレーション時に大小文字を区別するかどうかのフラグ。 IGNORECASEに0でない値が設定されていると、ルールのパターンマッチング、 FSによるフィールド分割、そして gsub, index, match, split, sub といった関数は全て正規表現オペレーショ ン時に大小文字を無視する。
NF
カレント入力レコードのフィールドの数。
NR
現在まで入力されたレコード数の合計。
OFMT
print 文で数値を出力するときのフォーマット。 デフォルトでは"%.6g"
OFS
出力フィールドのセパレータ。デフォルトではブランク。
ORS
出力レコードのセパレータ。デフォルトでは改行。
RS
入力レコードセパレータで、デフォルトでは改行。RSは例外的に文字列値の 先頭のキャラクタだけがレコードの分割に使用される。 RSが空文字列であれ ば、レコードは空行によって分割される。 RSが空文字にセットされたとき、 改行キャラクタは FSに設定されている値に加えて、常にフィールドセパレー タとして振る舞う。
RSTART
matchでマッチした文字列の先頭の位置。マッチしなかったときには0が入る。
RLENGTH
matchでマッチした文字列の長さ。マッチしなかったときは-1が入る。
SUBSEP
多次元配列の要素の添え字を区切るのに使用される文字列。デフォルトでは "\034"である。

セクション 組込み変数を参照.。

配列

配列はブラケット(`['`]')に囲まれた式によって添え字付けされる。 配列の添え字は常に文字列であり、数値は必要に応じて以下の変換ルールに 従って文字列に変換される (セクション 文字列と数値の変換を参照).

ブラケットの内側でカンマで区切られた複数の式を使った場合、配列の添字は添字の 区切り(SUBSEPの値)によって区切られた文字列に変換され、それを内部的な 添字の値とする。

特殊な演算子inif文やwhile文のなかで配列中に含まれる特 定の値を取り出すために使われる。

if (val in array)
        print array[val]

配列が多次元の添字を持っていたならば、(i, j, ...) in arrayを存在 する要素のテストのために使用する。

inforループのなかで、配列要素すべてに対する繰り返しを行なう ときに使われるだろう。 セクション 配列の全要素の走査を参照.

配列要素はdelete 文を使って配列から削除することができる セクション awkにおける配列を参照.

データ型

awkでの式の値は常に数値か、文字列のいずれかである。

特定の文脈(算術演算子のような)では、数値が要求される。このような場合、オペラ ンドは文字列から数値に変換される。このとき数値化できないような文字列であれば 0に変換される。

連接のような文脈では文字列値が要求される。数値データであればsprintfで 出力したような文字列に変換される。 セクション 文字列と数値の変換を参照.

強制的に文字列データを数値に変換するには、単に0を加えれば良い。ただし、文字 列がすでに数値データである場合には変換動作は行われない。 逆に強制的に数値データを文字列に変換するには、空文字列を連結すれば良い。

awk言語ではオペランドが両方とも数値であるか、少なくとも一方が数値で、 他方が数値文字列であれば数値として比較を行なうように定義している。そうではな く、少なくとも一方のオペランドが文字列に変換されていたら文字列同士の比較が行 なわれる。

初期化されていない変数は文字列値""(空文字列)を持つ。数値が要求され る文脈では0に等しい。

変数の名前付けと初期化についてはセクション 変数を参照、 変数の値がどのようにインタプリットされるかは セクション 文字列と数値の変換を参照。

パターンとアクション

アクションは`{'`}'に囲まれている。アクションかパターンのどち らかを省略する事ができる(もちろん両方を省略するという事はできない)。パター ンが省略されると、全ての入力に対してアクションが実行される。アクション部が省 略されると次に挙げるものと同じ動作を行う。

{ print }

つまり、入力された行をそのまま出力する。

コメントは`#' で始まり、行末まで続く。空行は文の区切りのために使われる だろう。通常は文の終わりは改行であるけれども、`,', `{', `?', `:', `&&', `||'が行の最後にきているときにはその限 りではない。また、do あるいは elseが行末にきている場合、自動的 に次の行以降に対応する文があるとみなされる。別のケースとして、行末に改行を無 視するための`\'がある場合、行が継続しているものとみなされる。

マルチステートメントは同一行上で`;'を使って文を区切る事で使う事ができる ようになる。これはルールのアクション部(通常の場合)ステートメントと、ルール 部のステートメントの両方に適用できる。

awkコメントについてはセクション awkプログラム中のコメントを参照.に、 awkの行継続のメカニズムについては セクション awkの文と行を参照.に 説明されている。

パターン

awkでのパターンは次のうちのいずれか一つである。

/regular expression/
relational expression
pattern && pattern
pattern || pattern
pattern ? pattern : pattern
(pattern)
! pattern
pattern1, pattern2
BEGIN
END

BEGINENDは、入力に対してテストを行わない特殊なパターンであ る。全てのBEGINルールのアクション部分はあたかも一つのBEGIN ルー ルで記述されたかのようにまとめられ、入力を開始する以前にルールの実行が行われ る。同様に全てのENDもまとめられて、入力が全て終了したとき(もしくは exit 文が実行されたときに)ルールの実行が行われる。 BEGINENDの二つのパターンはもう一方のパターンと一緒にされる事はない。 BEGIN パターンも ENDパターンもアクション部の省略はできない。

`/regular-expression/'というパターンは、各入力行に対して正規表現が マッチするかどうかを実行する仮想的な文である。正規表現はegrepの拡 張になっており、以下に挙げられる通りである。

relational expressionは、以下で定義される演算子をアクション中で使うこ とができる。これらは通常あるフィールドとある正規表現がマッチするかをテストす る。

`&&', `||', `!'といった演算子はそれぞれ、 Cと同じ様に論理積、 論理和、論理否定の演算子である。これらの演算子はまた、これもCと同じ様に式の 評価をするときにショートサーキット評価を行う。また、これらの演算子を組み合 わせて式を構成する事もできる。多くの言語でそうであるように、括弧を式の評価 の順序を変更するために使う事ができる。

`?:'という演算子はCでのそれと同じである。最初のパターンにマッチすると、 入力レコードに対して二番目のパターンが適用され、そうでなければ三番目のパタ ーンが適用される。二番目か、三番目のいずれか一つだけが適用される。

`pattern1, pattern2'の様な形式のパターンは範囲指定パターン と呼ばれる。このパターンはpattern1にマッチした行からpattern2にマッ チした行まで(pattern2も含まれる)の全ての行にマッチする。範囲指定パター ンは他のパターンのオペレータとして使用する事はできない。

awkルールのパターン部分の完全な記述はセクション パターンを参照。

正規表現

正規表現はegrepのものの拡張となっていて、以下に挙げるものがある。

c
キャラクタcにマッチする(ただし、cがメタキャラクタでない場合)。
\c
cというキャラクタにマッチする。
.
改行を除く全てのキャラクタにマッチする。
^
行、もしくは文字列の先頭にマッチする。
$
行、もしくは文字列の終端にマッチする。
[abc...]
abc... に含まれているキャラクタのどれかとマッチする (キャラクタク ラス)。
[^abc...]
abc...に含まれず、また改行でもないキャラクタにマッチする (キャラク タクラスの補集合)。
r1|r2
r1 または r2にマッチ(選択)。
r1r2
r1に続くr2の並びにマッチする(連接)。
r+
rの一回以上の繰り返しにマッチする。
r*
rの0回以上の繰り返しにマッチする。
r?
0個、もしくは1個のrとマッチする。
(r)
rにマッチ(グルーピング)。

正規表現に関する詳しい説明は セクション パターンとしての正規表現を参照.にある。

エスケープシーケンスは正規表現中に文字列定数を書くのと同じように記述する ことができる(セクション 定数式を参照).

アクション

実行文はブレース(`{'`}')に囲まれている。多くの言語と同じよ うに実行文は通常、代入文、条件文、ループなどからなる。演算子、制御文、入 出力文はCと同じ様に記述できる。

演算子

awkの演算子は優先順位の低いものから並べると次のようになる。

= += -= *= /= %= ^=
代入。通常の代入文(var=value)と代入演算子 (それ以外のもの )の両方がサポートされている。
?:
Cと同じく条件式。これは expr1 ? expr2 : expr3の様に 記述される。 expr1が真であれば式の値はexpr2に、そうでなければ expr3になる。expr2expr3のうち、どちらか一つだけが評価 される。
||
論理的な "または".
&&
論理的な "かつ".
~ !~
正規表現のマッチと、その否定
< <= > >= != ==
通常の関係演算子。
blank
文字列の連接。
+ -
加算と減算。
* / %
乗算、除算と剰余。
+ - !
単項演算子としてのプラスとマイナスと、論理反転。
^
べき乗演算子。 (`**'も同じで、`**=' という代入演算子もあるが、この 二つはPOSIX では定義されていない)
++ --
インクリメントとデクリメント。共に前置と後置がある。
$
フィールドの参照。

ここで例示した演算子の詳しい説明は セクション アクションとしての式を参照.、 フィールド参照演算子の説明は セクション フィールドの検査を参照.

制御文

制御文には以下に挙げるものがある。

if (condition) statement [ else statement ]
while (condition) statement
do statement while (condition)
for (expr1; expr2; expr3) statement
for (var in array) statement
break
continue
delete array[index]
exit [ expression ]
{ statements }

セクション アクション中の制御文を参照.

入出力文

入出力文には以下のようなものがある。

getline
次の入力レコードを$0にセットする。 NF, NR, FNRが 再設定される。
getline <file
fileの次の入力レコードを$0にセットし、NFが再設定される。
getline var
次の入力レコードをvarにセットし、同時にNF, FNR が再設定 される。
getline var <file
fileの次の入力レコードをvarにセットする。
next
現在の入力レコードに対する処理を中断する。次の入力レコードを読み込み、(その レコードに対して)awkプログラムの最初のパターンから処理を始める。入力 データがファイルの終端に達したならばEND ルールが実行される。
next file
現在の入力ファイルに対する処理を中断する。次のレコードの入力は次の入力ファイ ルから行われる。 FILENAME は更新され、FNRに1がセットされる。そ して、awk プログラムの最初のパターンから処理が行われる。もし、入力が もうないのであれば、(定義されていれば)ENDルールが実行される。
print
カレントレコードを出力する。
print expr-list
式を出力する。
print expr-list > file
fileに式を出力する。
printf fmt, expr-list
整形して出力する。
printf fmt, expr-list > file
整形してからfileに出力する。

この他の入出力リダイレクションも同様に許される。 printprintf`>> file'とする事によって出力をfileに追加す る形でリダイレクトでき、`| command' とすればパイプに対して書き込 みができる。同じようにして、`command | getline'とすれば getline での入力をパイプから行うようにできる。 getline は、ファ イルの終端に達したときに0を返し、エラーが発生した場合には-1 を返す。

getline文の説明はセクション getlineを使った入力を参照. に、 printprintfの説明はセクション 出力を参照.、 next文の働きはセクション nextを参照.

printfのまとめ

awkprintf 文とsprintf文は以下のような書式を受け付け る。

%c
一文字のASCIIキャラクタ。数値データに対して使われるとその数値をキャラクタコ ードとみなして対応するキャラクタを出力する。そうでない場合は対応する引数を文 字列とみなし、その先頭の文字を出力する。
%d
%i
十進数値(の整数部分)
%e
`[-]d.ddddddE[+-]dd' の形式の浮動小数点数値。
%f
[-]ddd.dddddd. の形式の浮動小数点数値。
%g
`%e'`%f'で変換後の文字列の長さが短い方を使用して変換し、同時に 0抑制を行う。
%o
符号なしの8進数値(の整数部分)
%s
文字列。
%x
符号なしの16進数値(整数)
%X
`%x'と似ているが、`a'から`f'の代わりに、`A' から`F'を 使って十進の10から15を表す。
%%
文字としての`%'。引数の変換は行わない。

以下のものはオプションである。 付け加えられたパラメータは、`%'と制御文字の間に置かれる。

-
式をフィールド中で左寄せする。
width
フィールドの幅を指定する。widthが0で始まっていればフィールドの空いて いる部分は0で埋められ、そうでなければ空白で埋められる。
.prec
文字列の最大の長さ、もしくは数値データの小数点以下の桁数の最大の長さを指定す る。

widthprecのどちらか、もしくは両方の値を`*'を使って指定す る事ができる。この場合、実際の値は引数リストから取得される。

例と、より詳しい説明は セクション printf文を使った Fancier Printingを参照.

特殊なファイル名

入出力のリダイレクトをprintprintfを使ってファイルに行った り、getlineを使ってファイルから入力する際に gawkはある特殊なファ イル名を内部的に認識する。これらのファイル名はgawkを呼出したプロセス (通常はシェル)から受け継いだファイルディスクリプタをアクセスできる。そして、 そのファイル名には以下のものがある。

`/dev/stdin'
標準入力。
`/dev/stdout'
標準出力。
`/dev/stderr'
標準エラー出力。
`/dev/fd/n'
ファイルディスクリプタnで示されるファイル。

以上のものに加えて、次に挙げるファイル名はコマンドライン上でデータファイルの 名前のために使われるだろう。

`/dev/pid'
このファイルを読むとカレントプロセスのプロセスIDが十進数で、改行でターミネー トされて返る。
`/dev/ppid'
このファイルを読むとカレントプロセスの親プロセスのプロセスIDが十進数で、改行 でターミネートされて返る。
`/dev/pgrpid'
このファイルを読むとカレントプロセスのプロセスグループIDが十進数で、改行 でターミネートされて返る。
`/dev/user'
このファイルを読むと改行でターミネートされたひとつのレコードが返る。レコード 中のフィールドはブランクで区切られていて、個々のフィールドは次のような情報を 保持している。
$1
getuidシステムコールの値。
$2
geteuidシステムコールの値。
$3
getgidシステムコールの値。
$4
getegidシステムコールの値。
もしフィールドを付け加えるならば、それはgetgroupsシステムコールが 返すグループIDだろう。 (マルチプルグループは全てのシステムでサポートされてはいない)

これらのファイルの名前はコマンドライン上でデータファイルの名前のように使われ るだろう。その名前はあなたの使うシステムで実際に使用できる名前でなければ単に 内部的に認識されるだけである。 セクション 標準入出力ストリームを参照.。

算術関数

awkは以下のような数値演算関数を持っている。

atan2(y, x)
y/x のアークタンジェントを返す(単位はラジアン)。
cos(expr)
余弦を返す(単位はラジアン)。
exp(expr)
指数関数。
int(expr)
小数部分を丸めて整数値にする。
log(expr)
自然対数を計算する
rand()
0から1の間の乱数を返す。
sin(expr)
正弦を返す(単位はラジアン)
sqrt(expr)
平方根を計算する。
srand(expr)
exprを新しい乱数源として使用する。exprを省略した場合は時刻を使用 する。戻り値は以前の乱数源である。

文字列関数

awkは以下に挙げる文字列処理関数を持っている。

gsub(r, s, t)
文字列t中で正規表現rに一致する部分文字列をsに置換し、置換 した回数を返す。tが省略されると$0が使われる。
index(s, t)
文字列sでの文字列tの位置を返す。tが見つからない場合には 0が返る。
length(s)
文字列sの長さを返す。もし、引数が省略されると$0の長さを返す。
match(s, r)
s中で正規表現rにマッチする位置を返す。マッチしない場合には0が返 される。RSTARTRLENGTHにもそれぞれ値がセットされる。
split(s, a, r)
正規表現rを区切りとして、文字列sを分解し配列aに格納する。 関数の戻り値としてフィールドの数が返る。rが省略された場合、 FSが 区切りとして使用される。
sprintf(fmt, expr-list)
expr-listfmtに従って整形し、結果の文字列を返す。
sub(r, s, t)
これはgsubと似ているが、最初に一致した部分文字列だけが置き換えられる。
substr(s, i, n)
si番目から始まる長さn文字の部分文字列を返す。 nが 省略されると、sの終端までが返される。
tolower(str)
文字列str中の英大文字を小文字に置き換えた文字列を返す。アルファベット 以外の文字はそのままである。
toupper(str)
文字列str中の英小文字を大文字に置き換えた文字列を返す。アルファベット 以外の文字はそのままである。
system(cmd-line)
cmd-lineをコマンドとして実行し、そのステータスを返す。

組み込み時刻関数

次に挙げる二つの関数は現在の時刻を取得し、整形することができる。

systime()
ある時刻(POSIX systemsのシステムでは1970年1月1日午前0時)から現在までの経過秒 数を返す。
strftime(format, timestamp)
timestampformatに従って整形する。 timestampが省略された 場合、現在の時刻が使われる。 strftimeが受け付ける変換指定は セクション タイムスタンプを扱う関数を参照. で詳しく説明 されている。

セクション 組込み関数を参照。

文字列定数

awkでの文字列はダブルクォート(")で囲まれたキャラクタの並びであ る。文字列中ではCと同じようにエスケープシーケンスを記述する事もできる。 エスケープシーケンスには次のものがある。

\\
文字としてのバックスラッシュ。
\a
"警告" キャラクタ。通常はASCII のBEL。
\b
バックスペース。
\f
改ページ。
\n
改行。
\r
復帰。
\t
水平タブ。
\v
垂直タブ。
\xhex digits
`\x'に続く16進文字列で表現されるキャラクタ。 ANSI Cと同じ様に、16進文字 列はエスケープシーケンスの一部として認識される。例えば、"\x1B"はASCII のエスケープキャラクタである。 (この`\x'エスケープシーケンスは POSIX の awkにはない)
\ddd
1文字から3文字の8進文字の並びで表現されるキャラクタ。したがって、 "\033" はASCIIのエスケープキャラクタとなる。
\c
cというキャラクタ自身。

エスケープシーケンスは固定正規表現中で使う事もできる。例えば /[ \t\f\n\r\v]/という正規表現は空白とマッチする。

セクション 定数式を参照.

関数

awkでは関数は次のように定義する。

function name(parameter list) { statements }

関数呼び出し時の実引数は、関数の宣言での仮引数の実体として使われる。配列は 参照渡し、その他の変数は値渡しで引数が渡される。

もし、関数呼び出し時の引数が宣言されている引数の数よりも少なければ、足りな い引数は空文字列で関数に与えられる。そういった引数はローカル変数として扱え る。

関数呼び出しの開き括弧は空白などを置かずに、関数名に続いて書かれなければな らない。これは文法的に連接演算子があるとみなされてしまうのを防ぐためだ。

funcfunctionの代わりに使う事ができる(ただし、 POSIXの awkでは使えない)。

関数から値を返すためにreturn文を使う

セクション ユーザー定義関数を参照.。

歴史的な機能

次に挙げる二つの機能は、gawkがサポートしている伝統的な実装の awkのものである。第一は、組み込み関数のlengthの呼び出しが、 引数だけでなく括弧も省略して行えるという事である。

a = length

これは、次のものと同じである。

a = length()
a = length($0)

この機能は POSIX 標準では良くないものとされている。 gawkではコマンド ライン上で`-W lint'が指定されているときにこの機能が使われると警告を表 示する。

もうひとつは、continue 文をwhile, for, doルー プの本体の外で使ったときの動作である。伝統的なawkの実装で は、next文と同等に扱われる。 gawkでは、`-W posix'が指定 されていないときにこの動作をする。


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