awk(1) FreeBSD 一般コマンドマニュアル

awk

前のページ 上に戻る 次のページ

awk



書式

       awk  [ POSIX or GNU style options ] -f program-file [ -- ]
       file ...
       gawk [ POSIX or GNU style options ] [  --  ]  program-text
       file ...


解説

       gawk  は GNU プロジェクトが実装した プログラミング言語 AWK
       の処理系です。本処理系は POSIX 1003.2 コマンド言語と ユ ー
       ティリティ規約に定められた言語の定義に適合しています。本バ
       ージョンはまた、Aho, Kernighan, Weinberger の著書 The  AWK
       Programming  Language   の 記述にもとづいており、 System V
       Release 4 UNIX の awk の付加機能も含んでいます。 gawk はま
       た、Bell Labs の新機能および GNU 独自の拡張も提供します。

       コ マ ン ドラインは、 gawk へのオプション、(もし -f または
       --file オプションにより指定されていなければ)AWK のプログラ
       ムテキスト、そして残りの引数列からなります。この残りの引数
       列は、定義済み AWK 変数 ARGC, ARGV を用いることで参照で き
       ます。


オプションフォーマット

       gawk   へ のオプションは、伝統的な POSIX 形式の 1 文字オプ
       ションと、GNU 形式のロングオプションがあります。 POSIX  形
       式のオプションは単一の "-" で始まり、一方 GNU 形式のものは
       "--" で始まります。ロングオプションは GNU の独 自 仕 様 と
       POSIX の必須仕様の両方について用意されています。

       POSIX 標準に従い、 gawk 独自仕様のオプションは -W オプショ
       ンへの引数で与えます。複数の -W オプションを指定することも
       できます。後述のように、各 -W オプションには、それに対応す
       るロングオプションが存在します。ロングオプションへの 引 数
       は、 空白を入れずに = でつないで指定するか、その次のコマン
       ドライン引数として渡すことができます。ロングオプションは、
       短縮形が一意である限り、短縮することができます。


オプション

       gawk は以下のオプションを受け付けます。

       -F fs
       --field-separator fs
              入力フィールドセパレータ (変数 FS の値)を fs としま
              す。

       -v var=val
       --assign var=val
              プログラムを実行する前に、変数 var に値 val を設 定
              します。このようにして設定した変数は、 AWK プログラ
              ムの BEGIN ブロック内でも参照できます。

       -f program-file
       --file program-file
       -W compat
       --traditional
       --compat
              互換モードで動作します。互換モードでは、  gawk   は
              UNIX awk と等価な動作を行い、GNU 独自拡張は解釈でき
              ません。このオプションの他の形式より も、  --tradi-
              tional   を使用することが好まれます。詳しくは後述の
              GNU B>拡B>張を参照してください。

       -W copyleft
       -W copyright
       --copyleft
       --copyright
              GNU の著作権表示の短いバージョンを標準出力へ書き 出
              し、成功状態で終了します。

       -W help
       -W usage
       --help
       --usage
              短 め の オプション一覧を標準出力へ書き出します。 (
              GNU コーディング規約に従い、本オプションを指定す る
              と awk はただちに終了し、成功を意味する終了ステータ
              スを返します。)

       -W lint

       --lint 他の AWK での処理が疑わしい、あるいは他の AWK と の
              互換性がない構造がある場合に警告を行います。
       -W lint-old
       --lint-old
              オ リジナルの Unix awk へ移植できない構造に関して警
              告を行います。

       -W posix
       --posix
              互換モードをオンにし、更に以下の制約が課せ ら れ ま
              す。

              o \x エスケープシーケンスを解釈しません。

              o FS が単一の空白に設定された場合、空白とタブのみが
                フィールドを区切り、改行はフィールドを区切りま せ
                ん。

              o キ ーワード function に対応する別名 func を解釈し
                ません。

              o 演算子 ^^= のかわりに ****= を用いるこ と
                ができません。

              o fflush() 関数は利用できません。

       --source program-text
              program-text  を AWK プログラムとして用います。本オ
              プションにより、ライブラリ化された関数 ( -f また は
              --file オプションを用いて読み込む) とコマンドライン
              から入力されたプログラムを簡単に合成することがで き
              ま す。これは、主にシェルスクリプトで用いられる中規
              模から大規模な AWK プログラムのために用意され ま し
              た。

       -W version
       --version
              実 行された gawk プログラムのバージョン情報を標準出
              力へ書き出します。これは主に、あなたが使用してい る
              gawk プログラムが Free Software Foundation が配布し
              ているプログラムのうち、最新のものであるかどうか を
              知 る場合に便利です。またバグレポートのときにも有用
              です。 (本オプションを指定すると、 GNU コーディング
              規約に従い、 awk はただちに終了し、成功を意味する終
              了ステータスを返します。)

       --     オプションの終了を意味します。AWK プログラムに  "-"
              か ら始まるオプションではない引数を与える場合に便利
              です。これは、主に他の POSIX プログラムの多くが引数
              に対して行う解釈と一貫性を保つためにあります。

       互換モードでは、他のオプションは不正であるとされるか、無視
       されます。通常の実行において、プログラムテキストがコマンド
       ラインに指定されていれば、不明なオプションは、AWK プログラ
       ムに ARGV 配列を通して渡されます。これは、AWK プログラムを
       "#!" 機構を用いて実行する場合に特に便利です。


AWK プログラムの実行

       AWK  プログラムは、パターンとアクションの組の列と、(もし必
       要なら) 関数定義からなります。

              pattern   { action statements }
              function name(parameter list) { statements }

       gawk はまず、 program-file (複数可) が指定されていればそれ
       から、 --source の引数から、あるいは、最初のオプションでは
       ない引数からプログラムを読み込みます。 -f--source オプ
       ションは、コマンドラインで複数回指定できます。 gawk は、す
       べての program-file とコマンドラインで指定したプログラムを
       結 合して使用します。新しく作った AWK プログラムひとつひと
       つに AWK 関数のライブラリを埋め込む必要が無いので、この 機
       能はライブラリの構築に便利です。また、ライブラリ関数とコマ
       ンドラインで指定したプログラムとを混合して使うことも可能に
       しています。

       環 境変数 AWKPATH により、 -f オプションで指定されたファイ
       ルを検索するパスを指定できます。 AWKPATH が設定されてい な
       い場合のデフォルトパスは ".:/usr/local/share/awk" です。 (
       ならば、それは変数への代入であると解釈されます。変 数  var
       は値 val に設定されます (これは、すべての BEGIN ブロックを
       実行したあとに行われます)。コマンドラインでの変数 の 代 入
       は、AWK が入力をフィールドやレコードに分割するためのセパレ
       ータを実行時に変更するのに便利です。また、1 つのデータファ
       イルに対し数回処理を行う必要がある場合、状態をコントロール
       するのにも便利です。

       配列 ARGV の要素に空 ("") がある場合、 gawk はその要素を無
       視します。

       gawk は、入力された各レコードに対してマッチする パターンが
       AWK プログラム内にあるかどうかを検索します。そのレコードに
       マッ チ し たパターンすべてについて、それぞれ対応する アク
       ションが実行されます。パターンは、プログラムテキストに出現
       した順序で検索されます。

       入力が尽きると、 gawk は (もしあれば) END ブロック (複数存
       在可) を実行します。


変数、レコード、フィールド

       AWK における変数は動的、すなわち、最初に使用されたときに生
       成されます。変数の値は、浮動小数点数か、文字列か、あるいは
       両方です。変数の用いられ方により変化します。AWK   で は ま
       た、1 次元配列を利用することができます。多次元配列も、擬似
       的にではありますが、利用可能です。プログラム実行開始時に、
       いくつかの定義済み変数が設定されます。これらを必要に応じて
       説明し、以下でまとめます。

   B>レB>コB>ーB>ド
       通常、レコードは改行文字により区切られます。レコードの区切
       りは、組み込み変数 RS へ値を代入することにより、制御できま
       す。 RS が単一文字の場合、その文字がレコードを区切ります。
       そうでない場合は、 RS は正規表現となります。入力中のテキス
       トで、この正規表現にマッチするものがレコードを区切ります。
       しかし互換モードでは、文字列値の最初の文字だけが、レコード
       セパレータに使用されます。 RS が空文字列に設定されていると
       きには、レコードは空行で区切られます。 RS が空文字列に設定
       されたときには、 FS の値にかかわらず、改行文字は常にフィー
       ルドセパレータとなります。

   B>フB>ィB>ーB>ルB>ド
       入 力レコードを読み込むごとに、 gawk はそのレコードを フィ
       ールドに分割します。分割する際には、変数 FS の値がフィール
       ド セパレータとして参照されます。 FS の値が1文字なら、その
       文字を境にフィールドが分割されます。 FS が空文字列の場合、
       個々の文字がフィールドセパレータとなります。いずれでもない
       場合、 FS は完全な正規表現であると解釈されます。特殊な場合
       と し て FS が単一の空白のときには、フィールドは連続した空
       白・タブ・改行により分割されます。 (後述の --posix の議 論
       を 参 照してください)。変数 IGNORECASE (下記参照) の値は、
       FS が正規表現の場合フィールド分割にも影響を与えること と、
       の 5 番目のフィールドの値を出力します。

              n = 5
              print $n

       変数 NF は、自動的に入力レコードのフィールドの数に設定され
       ます。

       存在しないフィールド (すなわち、 $NF より右のフィー ル ド)
       を参照した結果は空文字列になります。しかしながら、存在しな
       いフィールドへの代入(たとえば、 $(NF+2)=5 ) は NF の値を増
       加 させ、間のフィールドには空文字が設定されます。さらに $0
       の値は、フィールドの値を変数 OFS の値でフィールドを区 切っ
       たものとして再計算されます。負のフィールド番号への参照は致
       命的エラーとなります。 NF を減少させると、新しい値を越える
       フィールドの値は失われます。 $0 の値は、フィールドの値を変
       数 OFS の値でフィールドを区切ったものとして再計算 さ れ ま
       す。

   B>組B>みB>込B>みB>変B>数
       gawk の組み込み変数は以下のとおりです。


       ARGC        コマンドライン引数の個数 ( gawk へのオプション
                   と、プログラム指定は含みません)。

       ARGIND      現在処理中のファイル名が格納されて い る 配 列
                   ARGV のインデックス。

       ARGV        コマンドライン引数の配列。配列は、 0 から ARGC
                   - 1 までのインデックスを持ちます。 ARGV の内容
                   を変更することで、入力に用いるファイル名を変更
                   することができます。

       CONVFMT     数値の変換フォーマット。デフォルト値は  "%.6g"
                   です。

       ENVIRON     現在の環境変数の値からなる配列。配列は、環境変
                   数名によりインデックスされ、各要素の値はその環
                   境 変 数 の 値 です (例えば ENVIRON["HOME"]/home/arnold となるでしょう)。本配列に代 入 を
                   行っても、 gawk からリダイレクトや system() 関
                   数により実行されるプログラムの環境には影響を与
                   え ません(これは、将来の gawk では変更される可
                   能性があります)。

       ERRNO       getline のリダイレクト、 getline による読み 込
                   み、  close() 関数の実行時のいずれかにシステム
                   エラーが発生した場合、変数 ERRNO にはエラー の
                   内容を示した文字列が設定されます。

       FIELDWIDTHS 空白で区切られたフィールド長のリスト。もしこの
                   空白です。上述の B>フB>ィB>ーB>ルB>ドを参照して く だ さ
                   い。

       IGNORECASE  すべての正規表現と文字列操作において大文字小文
                   字の区別を制御します。もし、 IGNORECASE  が  0
                   でない値に設定されていれば、文字列比較、ルール
                   のパターンマッチ、 FS によるフィールド 分 割、
                   RS によるレコード分割、 ~!~ による正規表現
                   マッチ、 定 義 済 み 関 数  gensub(),  gsub(),
                   index(),  match(), split(), sub() において大文
                   字と小文字の違いは無視されます。 こ の た め、
                   IGNORECASE   が 0 以外の値なら、 /aB/"ab",
                   "aB", "Ab", "AB" のいずれにもマッチすること に
                   なります。他のAWK 変数と同様に IGNORECASE の初
                   期値は 0 なので、通常は正規表現と文字列操作 に
                   お い て大文字と小文字は区別されます。 Unix で
                   は、大文字小文字を無視する場 合、  ISO  8859-1
                   Latin-1   文字集合全てを使用できます。 B>注: 3.0
                   以前の gawk では IGNORECASE は正規表現操作のみ
                   に 影 響しました。現在は文字列比較にも影響しま
                   す。

       NF          現在の入力レコードのフィールド数。

       NR          現在までに読み込んだ入力レコード数の合計。

       OFMT        数字の出力フォーマット。デフォルト値は  "%.6g"
                   です。

       OFS          出 力フィールドセパレータ。デフォルトは空白で
                   す。

       ORS         出力レコードセパレータ。デフォルトは改行です。

       RS          入力レコードセパレータ。デフォルトは改行です。

       RT          レコードターミネータ。 gawk は、 RS で指定され
                   る 文 字または正規表現にマッチする入力テキスト
                   を、 RT に設定します。

       RSTART      match() によりマッチした最初の文字の位置。0 は
                   マッチしなかったことを示します。

       RLENGTH     match()   に よりマッチした文字列の長さ。-1 は
                   マッチしなかったことを示します。

       SUBSEP      多次元配列を実現する際に用いられる、配列のイン
                   デッ クスを結合する文字。デフォルト値は "\034"
                   です。

   B>配B>列
       配列は、ブラケット ([]) の間の式によってインデックスを
       ているかを調べることができます。

              if (val in array)
                   print array[val]

       もし、配列が多次元インデックスを持つなら、 (i, j) in array
       を用います。

       in はまた、 for ループ中で、配列のすべてのインデックス値に
       ついて繰り返すために用いることができます。

       配列の要素は、 delete ステートメントを用いて削除することが
       できます。 delete ステートメントはまた、添字を指定せずに配
       列名のみを指定することにより、配列全体を削除するためにも使
       えます。

   B>変B>数B>のB>型B>とB>変B>換
       変 数とフィールドは、(浮動小数点数の) 数値または文字列、あ
       るいは両方として扱われます。変数の値がどのように解釈される
       かは、変数の使われ方によって変化します。数式中で用いられれ
       ば変数は数値として解釈され、文字列として用いられれば文字列
       として解釈されます。

       変数の値を強制的に数値であると解釈させたい場合は、変数に 0
       を加えます。文字列と解釈させたい場合は空文字列を結合 し ま
       す。

       文 字 列 を数値に変換する必要がある場合、変換は atof(3) に
       よって行われます。数値を文字列に変換する場合は、変数  CON-
       VFMT  の値をフォーマット文字列として用いて、 sprintf(3) に
       より行われます。AWK ではすべての数値は浮動小数点数ですが、
       整 数 値は常に整数として変換が行われます。よって、以下の場
       合、

              CONVFMT = "%2.2f"
              a = 12
              b = a ""

       変数 b は文字列値 "12" となり、"12.00" とはなりません。

       gawk は、以下のようにして比較を行います: 2 つの変数が数 値
       なら数値として比較します。もし片方が数値で片方が`数値'文字
       列なら、数値として比較されます。片方が数値でない文字 列 な
       ら、 数 値のほうが文字列に変換され、文字列として比較されま
       す。両方とも文字列なら、文字列として比較されます。POSIX 標
       準に従うなら、両方とも数値文字列の場合は数値として比較しま
       すが、これは明らかに間違いです。 gawk はそのような動作をし
       ません。

       "57" のような文字列定数は数値文字列では なく、文字列定数で
       す。「数値文字列」の概念は、フィールド、 getline の入 力、
       FILENAMEARGV の要素、 ENVIRON の要素、数値文字列から

              { print }

       これはレコード全体を出力します。

       コメントは文字 "#" で始まり、行末まで続きます。空行は、 複
       数ステートメントの間をあけるのに使うことができます。通常、
       ステートメントは改行で終わります。ただし、次の記号で行が終
       わ る 場合にはこの限りではありません: ",", {, ?, :, &&, ||do または else で終わる行は、ステートメントが自動的に以
       降 の 行 へ継続されます。また、改行の直前に "\" を置くこと
       で、行を継続することができます。この場合、その改行は無視さ
       れます。

       ";"  で区切ることにより、1行に複数のステートメントを記述す
       ることができます。 (通常のように) パターン-アクション対 中
       の ア クション部におけるステートメントだけではなく、パター
       ン-アクション対ステートメント自身も、
        ";" で区切って複数置くことができます。

   B>パB>タB>ーB>ン
       AWK のパターンは、以下のうちのいずれかです。

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

       BEGINEND は特殊なパターンであり、入力と比較されるこ と
       は ありません。すべての BEGIN パターンに対応したアクション
       部は結合され、そのようなすべてのアクション部が単一の BEGIN
       ブロック中にあるかのように扱われます。結合されたアクション
       は、すべての入力ファイルの読み込みに先立って実行されます。
       同 様にすべての END ブロックは結合され、すべての入力ファイ
       ルの処理後 (あるいは、exit ステートメントが実行されたとき)
       に実行されます。 BEGINEND はパターン式内で他のパターン
       と混ぜて使うことはできません。また、 BEGINEND パターン
       はアクション部を省略することができません。

       /regular  expression/   パ タ ー ンでは、正規表現 (regular
       expression) にマッチした入力レコードに対してアクションが実
       行されます。正規表現は egrep(1) と同じものが使えます。あと
       に要約を示します。

       関係式(relational expression) では、後述のアクションについ
       ての節で示す演算子を用いることができます。これらは概して、
       pattern1, pattern2 形式は 範囲パターンと呼ばれます。範囲パ
       ターンは、 pattern1 にマッチするレコードから、 pattern2 に
       マッチするレコードまでのすべてにマッチします。この形式は、
       他のパターン式と混合して用いることはできません。

   B>正B>規B>表B>現
       awk  の正規表現は egrep のものと同様に、拡張された正規表現
       です。以下の構成要素から成り立っています。

       c          メタ文字ではない c にマッチします。

       \c         リテラル文字 c にマッチします。

       .          改行を 含む任意の 1 文字にマッチします。

       ^          文字列の先頭にマッチします。

       $          文字列の終端にマッチします。

       [abc...]   文字リストであり、 abc...  のいずれか 1 文字 に
                  マッチします。

       [^abc...]   文字リストの逆であり、 abc...  以外の 1 文字に
                  マッチします。

       r1|r2      選言: r1 または r2 にマッチします。

       r1r2       結合: r1 の直後に r2 が続くものにマッチします。

       r+         r の 1 回以上の繰り返しにマッチします。

       r*         r の 0 回以上の繰り返しにマッチします。

       r?         r の 0 回または 1 回の繰り返しにマッチします。

       (r)        グループ化: r にマッチします。

       r{n}
       r{n,}
       r{n,m}      ブレース中に 1 つか 2 つの数値を記述することに
                  より、 インターバル表現を表します。ブレース中に
                  数値が 1 つある場合、直前の正規表現 rn 回繰
                  り返されます。2 つの数値がコンマで区切られて い
                  る場合、 rn 回から m 回繰り返されます。1 つ
                  の数値に続いてコンマがある場合、 r は少なくとも
                  n 回繰り返されます。
                  インターバル表現は --posix または --re-interval
                  がコマンドラインにて指定されているときのみ利 用
                  可能です。

       \y         語の先頭または末尾の空文字列にマッチします。

       \'         バッファの末尾の空文字列にマッチします。

       文字列定数中で用いることができるエスケープシーケンス (後述
       参照) は、正規表現中でも使用することができます。

       文字クラスは POSIX 標準で導入された新機能です。文字クラ ス
       は特定の属性を持つ文字列リストの特殊表現ですが、実際の文字
       集合自身は国や文字集合によって様々なものとなります。 例 え
       ば、アルファベット文字はアメリカ合州国とフランスとでは異な
       ります。

       文字クラスが有効なのは、文字リストのブラケットの中の正規表
       現だけです。文字クラスは、 [: と、クラスを表現するキーワー
       ドと、 :] で構成されます。以下に POSIX 表現で定義される 文
       字クラスを示します。

       [:alnum:]
              アルファベットと数値文字。

       [:alpha:]
              アルファベット文字。

       [:blank:]
              空白とタブ文字。

       [:cntrl:]
              制御文字。

       [:digit:]
              数値文字。

       [:graph:]
              印 字可能で可視な文字。 (空白は印字可能ですが見えま
              せん。一方 a は印字可能かつ可視です。)

       [:lower:]
              アルファベット文字の小文字。

       [:print:]
              印字可能な文字 (制御文字以外)。

       [:punct:]
              句読点文字 (レター、数値、制御文字、空白文字のい ず
              れでもない文字)。

       [:space:]
              空 白文字 (空白、タブ、フォームフィード等の少数の文
              字を指す)。

       [:upper:]
              アルファベット文字の大文字。

       す。  (例えば、フランス語では単なる "e" とグレーブアクセン
       ト付きの e` とでは等価です。)

       照合シンボル
              参照シンボルは複数文字の参照要素であり、 [..]
              で括ります。例えば、 ch が参照要素の場合、 [[.ch.]]
              は正規表現となり、この参照要素にマッチし ま す。 一
              方、 [ch]ch にマッチする正規表現です。

       等価クラス
              等 価クラスは等価な文字リストを指すロケール固有の名
              前です。名前は [==] で括ります。例えば、名前  e
              は "e," "e`,", "e`." のすべてを表現するために使用さ
              れるかもしれません。この場合、 [[=e=]]e, e', e`
              のいずれかにマッチする正規表現となります。

       こ れらの機能は英語以外のロケールにて非常に有用です。 gawk
       が正規表現のマッチングに使用するライブラリ関 数 は、 現 在
       POSIX 文字クラスのみを理解し、参照シンボルと等価クラスは理
       解しません。

       \y, \B, \<, \>, \w, \W, \`, \' の演算子は gawk 固 有 で あ
       り、GNU 正規表現ライブラリの機能を元にした拡張です。

       様々なコマンドラインオプションによって、正規表現中の文字を
       gawk がどのように解釈するのかを制御できます。

       オプション無し
              デフォルトでは、 gawk は上述の POSIX 正規表現および
              GNU  正規表現のすべての機能を提供します。しかしなが
              ら、インターバル表現はサポートされません。

       --posix
              POSIX 正規表現のみがサポートされ、GNU 演算子はサ ポ
              ートされません (例えば、 \w はリテラル w にマッチし
              ます)。インターバル表現は許されます。

       --traditional
              伝統的な Unix awk の正規表現がサポートされます。GNU
              演 算 子、 イ ン タ ーバル表現、 POSIX 文字クラス (
              [[:alnum:]] など) はサポートされません。 8 進または
              16 進のエスケープシーケンスで表現される文字は、正規
              表現のメタ文字を表現するとしても、リテラルとして 扱
              われます。

       --re-interval
              --traditional  が指定されていたとしても、正規表現中
              でインターバル表現をサポートします。

   B>アB>クB>シB>ョB>ン
       アクションは、ブレース {} で囲みます。アクションは通常
       の代入、条件文、ループ文等からなります。演算子、制御文、入
                   代入演算子も存在する)。

       + - !       単項のプラス、マイナス、論理否定。

       * / %       乗算、除算、剰余。

       + -         加算と減算。

       space       文字列結合。

       < >
       <= >=
       != ==       通常の関係演算子。

       ~ !~        正規表現マッチ、否定のマッチ。 B>注B>意: ~!~
                   の 左辺に正規表現定数 (/foo/等) を用いてはいけ
                   ません。正規表現定数は右辺にのみ置くことができ
                   ま す。 式 /foo/ ~ exp(($0 ~ /foo/) ~ exp)
                   と等価であり、これは通常意図するものとは異なり
                   ます。

       in          配列のメンバ。

       &&          論理 AND。

       ||          論理 OR。

       ?:          C   言 語 の条件式と同様です。 expr1 ? expr2 :
                   expr3の形式で使います。もし expr1 が真なら式の
                   値は expr2 になり、そうでなければ expr3 になり
                   ます。 expr2expr3 のうち片方のみが評価され
                   ます。

       = += -=
       *= /= %= ^=  代入。絶対代入 (var = value) と演算子代入 (他
                   の形式) がサポートされています。
   B>制B>御B>スB>テB>ーB>トB>メB>ンB>ト
       制御ステートメントは以下のとおりです。
              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]
              delete array
              exit [ expression ]
              { statements }
   B>入B>出B>力B>スB>テB>ーB>トB>メB>ンB>ト
       入出力ステートメントは以下のとおりです。
       close(file)         ファイル (またはパイプ、下記参照) をク
                           合、 END ブロックが存在すれば実行さ れ
                           ます。
       nextfile             現 在の入力ファイルに対する処理を終了
                           し、次の入力ファイルからレコードを読み
                           込みます。 FILENAMEARGIND が更新さ
                           れ、 FNR が 1 にリセットされ、AWK プロ
                           グラムの最初のパターンから処理が開始さ
                           れます。入力データの終端に達した と き
                           は、 もし存在すれば、 END ブロックが実
                           行されます。 B>注: 以前のバー ジョ ン の
                           gawk  では next file と 2 語で使用され
                           ていました。この用法はまだ認識されます
                           が、警告メッセージを生じさせますし、最
                           終的には無くなる表現です。
       print               現在のレコードを出力します。出力レコー
                           ドは ORS 変数の値にて終端されます。
       print expr-list      式を出力します。各式は OFS の値で区切
                           られます。出力されるレコードの最後には
                           ORS の値が付加されます。
       print expr-list >file
                           式をファイル file に出力します。各式は
                           OFS の値で区切られます。出力されるレコ
                           ー ド の 最後には ORS の値が付加されま
                           す。
       printf fmt, expr-list
                           書式付き出力です。
       printf fmt, expr-list >file
                           ファイル file への書式付き出力です。
       system(cmd-line)    コマンド cmd-line を実行し、終了ステー
                           タスを返します (POSIX に対応しないシス
                           テムでは使用できない場合があります)。
       fflush([file])      オープンされている出力ファイルまたはパ
                           イプ file に関連づけられているバッファ
                           をフラッシュします。 file を指定しない
                           と、 標 準 出 力がフラッシュされます。
                           file が空文字列の場合、オープンされ て
                           いるすべてのファイルとパイプのバッファ
                           をフラッシュします。
       その他の形式のリダイレクトとして以下のものが利用可能です。
       printprintf に対して、 >> file を指定すると出力はファ
       イル file に追加され、 | command は出力をパイプに対して 行
       い ま す。 同 様に、 command| getline はコマンドの出力から
       getline を行ないます。 getline はファイル終端では 0 を、エ
       ラー時には -1 を返します。
       注:   ル ー プ 中で getline へパイプ書き込みする場合または
       printprintf からパイプ読み取りする場合、コマンドの新イ
       ン スタンスを作成するために close() を使用することが必要で
       す。パイプが EOF を返すときでも、AWK は自動的にはパイプ を
       閉じません。
   printf B>スB>テB>ーB>トB>メB>ンB>ト
       AWK での printf ステートメントと sprintf() 関数 (後述参照)
       は、以下の変換指定書式を受け付けます。
              省 略されます。 %G 形式では %e の代りに %E を使用し
              ます。

       %o     符号なしの 8 進数 (整数)。

       %u     符号なしの 10 進数 (整数)。

       %s     文字列。

       %x
       %X     符号なしの 16 進数 (整数)。 %X 形式では、 abcdef の
              代りに ABCDEF を用います。

       %%     単一の文字 % 。引数は使用しません。

       % と上記の制御文字との間にオプショナルな追加のパラメータを
       置くことができます。以下にそれらを示します。

       -      左寄せ。

       空白   数値変換において、正の値のプレフィックスは空白と な
              り、 負 の 値のプレフィックスはマイナス記号となりま
              す。

       +      プラス記号は幅修正子 (後述) の前に使用し、整形さ れ
              る データが正であったとしても、数値変換に対して常に
              符号を付けることを指示します。 + は空白修正子に優先
              します。

       #      ある制御レターに対して「別の形式」を使用します。 %o
              に対しては先行する 0 を与え、 %x%X に対しては非
              0  の結果に対して先行する 0x0X を与えます。 %e,
              %E, %f に対しては結果に常に小数点を含めま す。  %g,
              %G に対しては結果の末尾から 0 を取り除きません。

       0       先頭の 0 (ゼロ) はフラグとして動作し、出力を空白で
              はなく 0 でパディングすることを示します。これは非数
              値 の出力書式に対しても適用されます。このフラグが有
              効なのは、フィールド幅が印字される値の幅より広い と
              きだけです。

       width  フィールドが指定した幅 width になるようにパディング
              されます。フィールドは通常空白でパディング さ れ ま
              す。  0 フラグが使用された場合には 0 でパディングさ
              れます。

       .prec  印字において使用する精度を数値で指定し ま す。  %e,
              %E, %f の書式に対しては、小数点の右側に印字される数
              字の数を指定します。 %g, %G の書式に対しては、仮 数
              部 の最大数を指定します。 %d, %o, %i, %u, %x, %X の
              書式に対しては、印字される数字の最小数を指 定 し ま
              す。 文字列に対しては、印字される文字列からとりださ

       ファイル名は以下のとおりです。

       /dev/pid     現在のプロセスのプロセスID (10 進数で、最後に
                   改行が付きます) を読み込むことができます。

       /dev/ppid   現在のプロセスの親のプロセスのプロセ スID  (10
                   進数で、最後に改行が付きます) を読み込むことが
                   できます。

       /dev/pgrpid 現在のプロセスのプロセスグループ ID (10  進 数
                   で、最後に改行が付きます) を読み込むことができ
                   ます。

       /dev/user   このファイルを読むことで、改行で終わる単一のレ
                   コードが得られます。各フィールドは空白で区切ら
                   れています。 $1getuid(2) システムコール の
                   値、  $2geteuid(2) システムコールの値、 $3getgid(2) システムコールの値、 $4gete-
                   gid(2)   シ ステムコールの値です。もし、さらに
                   フィールドがあれば、それは getgroups(2) システ
                   ムコールが返すグループ ID のリストです。全ての
                   システムで複数のグループがサポートされているわ
                   けではありません。

       /dev/stdin  標準入力。

       /dev/stdout 標準出力。

       /dev/stderr 標準エラー出力。

       /dev/fd/n    オープンされたファイルディスクリプタ n に対応
                   しているファイル。

       エラーメッセージを出力するには、以下の方法が便利です。

              print "You blew it!" > "/dev/stderr"

       もしこの機能が無かったら、次のようにするしかないとこ ろ で
       す。

              print "You blew it!" | "cat 1>&2"

       これらのファイル名は、コマンドラインのデータファイル指定で
       使うこともできます。

   B>数B>値B>関B>数
       AWK は以下の定義済み数値関数を持っています。


       atan2(y, x)   y/x の逆正接をラジアンで与えます。

       cos(expr)     expr の余弦をラジアンで与えます。
                     式が指定されなかった場合は、時刻が用いられま
                     す。直前の種の値を返します。

   B>文B>字B>列B>関B>数
       gawk は以下の定義済み文字列関数を持っています。


       gensub(r, s, h [, t])   対象文字列 t から正規表現 r のマッ
                               チ を探します。 hg または G で
                               開始する文字列の場合、マッチする r
                               を すべて s に置き換えます。そうで
                               ない場合、 h は何番目の r のマッチ
                               を 置き換えるのかを示します。 t が
                               与えられない場合、代りに $0 が使用
                               さ れます。置換テキスト s では、シ
                               ーケンス \n ただし n は 1 か ら  9
                               ま で の 数字を使用して、 n 番目に
                               マッチした括弧付きサブ式を示すこと
                               ができます。シーケンス \0 は文字 &
                               と同様、マッチしたテキスト全体を表
                               し ます。 sub()gsub() とは異な
                               り、修正された文字列が関数の結果と
                               して返され、元の対象テキストは変更
                               され ません。

       gsub(r, s [, t])        文字列 t 中で正規表現 r にマッチし
                               た 部分をすべて s に置換します。置
                               換の個数を返します。 t を指定し な
                               かった場合は $0 が用いられます。置
                               換テキストでは、 & は実際にマッ チ
                               し た テキストで置き換えられます。
                               \& を使用するとリテラルの & を得る
                               こ と が できます。 sub(), gsub(),
                               gensub() における & とバックスラッ
                               シュに関する完全な議論は Effective
                               AWK Language Programming を参照 し
                               てください。

       index(s, t)             文字列 s 中に含まれる文字列 t の位
                               置を返します。 t が含まれていな い
                               場合は 0 を返します。

       length([s])             文字列 s の長さを返します。 s を指
                               定しなかった場合には $0 の長さを返
                               します。

       match(s, r)             文字列 s 中で正規表現 r にマッチす
                               る位置を返します。マッチしない場合
                               は  0   を 返 し ま す。 RSTARTRLENGTH の値が設定されます。

       split(s, a [, r])       文字列 s を正規表現 r を用いて分割
                               n   文字の部分文字列を返します。 n
                               が省略された場合、 i 文字目以降 の
                               部分文字列が返されます。

       tolower(str)             文字列 str をコピーし、大文字をす
                               べて小文字に変換したものを返 し ま
                               す。アルファベットでない文字は変化
                               しません。

       toupper(str)            文字列 str をコピーし、小文字を す
                               べ て 大文字に変換したものを返しま
                               す。アルファベットでない文字は変化
                               しません。

   B>時B>間B>関B>数
       タ イムスタンプを含んだログファイルの処理は AWK プログラム
       の主な使い道の1つですから、 gawk はタイムスタンプを取り 出
       したり、フォーマットするための 2 つの関数を提供します。


       systime() 基準時点からの経過秒数を返します (POSIX システム
                 では、基準時点は UTC で 1970 年 1 月 1  日  0:00
                 です)。

       strftime([format [, timestamp]])
                 書 式 format に従って timestamp をフォーマットし
                 ます。 timestampsystime() が返す値と同じ形式
                 で なければなりません。 timestamp が省略された場
                 合、現在の日付が使用されます。 format が省略され
                 た 場 合、  date(1) が出力に使用するものと同じデ
                 フォルトフォーマットが使用されます。利用可 能 な
                 フォ ーマットについては、ANSI C の strftime() 関
                 数の仕様を参照して下さい。パブリックドメイ ン な
                 strftime(3) とそのマニュアルページが gawk ととも
                 に配布されています。もし、 gawk を作成するために
                 その strftime を用いた場合は、そのマニュアルに記
                 述されている変換書式が gawk でも利用可能です。

   B>文B>字B>列B>定B>数
       AWK での文字列定数は、ダブルクォート (") に狭まれた文字 の
       列 です。文字列内では、C 言語のようにいくつかの エスケープ
       シーケンスが使えます。


       \\   バックスラッシュそのもの。

       \a   「警告」文字。通常は ASCII BEL 文字です。

       \b   バックスペース。

       \f   改ページ (フォームフィード)。


       \ddd 1 桁か 2 桁か 3 桁の 8 進数で表現された文字。例えば、
            "\033" は ASCII ESC (エスケープ) 文字です。

       \c   文字 c そのもの。

       エスケープシーケンスは正規表現定数内でも用いることができま
       す (例えば、 /[ \t\f\n\r\v]/ は空白文字にマッチします)。

       互換モードでは、8 進および 16 進のエスケープシーケンスで表
       現される文字は、正規表現定数として使用された場合、リテラル
       として扱われます。それゆえ、 /a\52b//a\*b/ と 等 価 で
       す。


関数

       AWK では関数を以下のようにして定義します。

              function name(parameter list) { statements }

       関数は、パターンまたはアクションの式から呼び出されたときに
       実行されます。関数呼び出しにおいて与えられた実引数が、関数
       宣言における仮引数に受け渡されます。このとき配列の場合は参
       照渡しが行われ、他の変数の場合は値渡しで行われます。

       元々 AWK に関数は備わっていませんでしたので、局所変数の 機
       構はあまりスマートではありません。局所変数は引数リストの余
       分な引数として宣言します。局所変数と関数引数を区別す る た
       め、余分な空白で区切るのが慣習です。例えば、以下のようにし
       ます。

              function  f(p, q,     a, b)   # a & b B>はB>局B>所B>変B>数
              {
                   ...
              }

              /abc/     { ... ; f(1, 2) ; ... }

       関数呼び出しにおける左括弧は、空白を狭まずに関数名の直後に
       置かなければいけません。これは、文字列結合演算子との曖昧さ
       を生じさせないために必要です。この制限は、上述の組み込み関
       数にはあてはまりません。

       関数は、他の関数を呼び出したり、自分自身を再帰的に呼び出す
       ことができます。局所変数として用いられる関数引数は、関数起
       動時に空文字列および 0 に初期化されます。

       関 数から値を返すには return expr を使用してください。値を
       指定しない場合、または関数の終りから "落ちる" (訳注: 関 数
       を閉じるブレースに到達する) ことにより関数から戻る場合、値
       は未定義です。

       --lint が指定されたとき、 gawk は実行時ではなくパーズ時 に
            END  { print nlines }

       行番号をつける。

            { print FNR, $0 }

       全ファイルを通した行番号をつける。

            { print NR, $0 }


関連項目

       egrep(1), getpid(2),  getppid(2),  getpgrp(2),  getuid(2),
       geteuid(2), getgid(2), getegid(2), getgroups(2)

       The  AWK  Programming  Language,  Alfred  V. Aho, Brian W.
       Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN
       0-201-07981-X.

       Effective AWK Language Programming, Edition 1.0, published
       by the Free Software Foundation, 1995.


POSIX 互換

       gawk は最新版の UNIX awk との互換性だけでなく、POSIX 標 準
       との互換性も追求しています。このため gawk には以下のような
       機能が取り入れられています。これらの機能は AWK 本には述 べ
       ら れていませんが、 Bell Labs および POSIX 標準の awk が有
       している機能です。

       プログラム実行前に変数代入を行なう -v オプションは新しい物
       で す。 AWK 本によれば、コマンドラインで指定された変数代入
       は awk が引数をファイル名としてオープンする際に行なわれ る
       こ とになります。つまりこれは BEGIN ブロックの実行後です。
       しかしながら初期の頃の実装では、引数の中でファイル名 に 先
       立っ て 変 数代入が指定されている場合には、代入は BEGIN ブ
       ロック実行の 前に行われていました。そしてアプリケーショ ン
       は、 この「仕様」に依存するようになりました。 awk がそのド
       キュメントに合うように直された時、昔の動作に依存しているア
       プリケーションの便宜を図るためにこのオプションが加えられま
       した。 (この仕様は AT&T および GNU の開発者達によって合 意
       されました。)

       独 自機能のための -W オプションは POSIX 標準に従ったもので
       す。

       引数の列に特別なオプション "--" を指定すると、 gawk はそこ
       がオプションの終わりであると解釈します。互換モードにおいて
       は未定義オプションは警告が出力され、それ以外のものは無視さ
       れ ます。通常の実行においては残りの引数は AWK プログラムに
       引き渡されます。

       AWK 本は srand() の返り値を定義していません。 POSIX 標準で
       は、その関数が使っている種を返し、乱数シーケンスを追跡でき
       拡張機能をすべて禁止することができます。

       gawk が持つ以下の機能は POSIX awk では使用できません。

              o エ スケープシーケンス \x 。( --posix で抑止できま
                す。)

              o fflush() 関数。( --posix で抑止できます。)

              o systime(), strftime(), gensub() の各関数。

              o 入出力リダイレクトで利用可能な特殊ファイル名は 理
                解されません。

              o 変数 ARGIND, ERRNO, RT は特殊変数ではありません。

              o 変数 IGNORECASE とその副作用は利用できません。

              o 変数 FIELDWIDTHS と固定長フィールド分割。

              o RS の正規表現としての使用。

              o FS に空文字列を設定することにより各文字を切り出す
                能力と、 split() の 3 番目の引数。

              o -f オプションで指定されたファイル名についてパス検
                索を行わないこと。よって、環境変数 AWKPATH は特殊
                な変数ではありません。

              o 現 在の入力ファイルに対する処理を終わらせるために
                使用される nextfileo 配列全体を削除するために使用される delete 配列。

       AWK 本は関数 close() の返り値を定義していません。 gawkclose()   は、 ファ イルやパイプをクローズする際に呼び出す
       fclose(3)pclose(3)、からの返り値を返します。

       オプション --traditional 付きで gawk を起動し -F オプ ショ
       ン への引数 fs として "t" を与えた場合に、 FS の値はタブ文
       字に設定されます。 gawk -F\t ...  とタイプしても、シェルが
       単に "t" をクォートするので、"\t" は -F オプションに渡され
       ません。これは少々見苦しい特殊事例ですので、デフォルトの動
       作 と し ては採用されていません。 --posix を指定した場合に
       も、この動作は行なわれません。タブ文字をフィールドセパレー
       タ と して使用したい場合には、クォートを使用するのが最良で
       す: gawk -F'\t' ....


歴史的機能

       gawk は歴代の AWK の実装にあった 2 つの機能を備え て い ま
       す。  1 つめとして、組み込み関数 length() は引数無しで呼び
       出せるだけでなく、さらに括弧無しでも呼び出せます!    し た
       break ステートメントを使用できるという機能です。伝統 的 な
       AWK の実装では、このように使用した continue ステートメント
       を next ステートメントと等価なものとして扱ってきま し た。
       gawk では --traditional が指定された場合に、この機能を使う
       ことができます。


環境変数

       環境に POSIXLY_CORRECT が存在する場合には、 gawk はコマ ン
       ド ラインで --posix が指定されている時と全く同じ動作をしま
       す。このとき --lint が指定されていると gawk はこの作用につ
       いての警告メッセージを出力します。

       AWKPATH 環境変数を使用して、 gawk-f および --file オプ
       ションで指定されたファイル名を検索するディレクトリを指定で
       きます。


バグ

       コマンドラインでの変数代入機能を使用するには、変数への代入
       を直接コマンドラインに書けばよく、 -F オプションをつける必
       要 はありません。このオプションは昔の awk との互換性のため
       だけに残されています。

       ファ イ ル  /dev/fd   お よ び  /dev/stdin,   /dev/stdout,
       /dev/stderr を実際にサポートしているシステムでの gawk から
       は、それらがないシステムとは違った出力が得られるかもしれま
       せん。 gawk はそれらのファイルを内部で解釈する際に標準出力
       への出力を /dev/stdout への出力と同期させますが、それら の
       ファイルを持つシステムでは出力はそれぞれ異なるファイルへ向
       けられます。利用者の方で気を付けるように し て く だ さ い
       (Caveat Emptor)。

       文法的に誤った単一文字プログラムはパーズスタックを溢れさせ
       る傾向があり、まったく分からないメッセージを生成する傾向に
       あります。このようなプログラムの診断は驚くべきことに一般に
       難しく、診断の努力はまったく無意味になります。


バージョン情報

       このマニュアルは gawk バージョン 3.0.6 について記載して い
       ます。


作者

       UNIX  awk   の最初のバージョンは、AT&T Bell Labs の Alfred
       Aho と Peter Weinberger および Brian Kernighan によって 設
       計、 実装されました。 Brian Kernighan はその保守と改良を続
       けています。

       Free Software Foundation の Paul Rubin   と  Jay  Fenlason
       が、Seventh  Edition  UNIX  で配布された最初のバージョンの
       awk と互換性を持つように gawk を書きました。 John Woods は
       数 々 の バ グ 修 正 を 送って下さいました。 David Trueman
       は、Arnold Robbins が送って下さった内容をもとに、 gawk  を
       新バージョンの UNIX awk 互換にしました。
       ムとデータを記述してください。

       バ グ レ ポートを送る前に 2 つのことを行ってください。第 1
       に、最新の gawk を使用されていることを確認してください。多
       くの (通常微妙な) バグが各々のリリースで修正されていますの
       で、ご使用のものが古い場合には問題は既に解決されているかも
       し れません。第 2 に、このマニュアルページとリファレンスマ
       ニュアルを注意深く読み、あなたがバグだと思うものが確かにバ
       グであり、大きく変わった言語仕様ではないことを確認してくだ
       さい。

       バグレポートを comp.lang.awk に投稿することだけはしない で
       ください。 gawk の開発者達は時々このニュースグループを読み
       ますが、バグレポートをこのニュースグループに投稿してもバグ
       レポートとして信頼性がありません。上記のアドレスへの電子メ
       ールでお願いします。


謝辞

       Bell Labs の Brian Kernighan はテストおよびデバッグの 間、
       貴重な助力を提供して下さいました。感謝致します。


COPYING PERMISSIONS

       Copyright (C) 1996-2000 Free Software Foundation, Inc.

       Permission  is  granted  to  make  and distribute verbatim
       copies of this manual page provided the  copyright  notice
       and this permission notice are preserved on all copies.

       Permission is granted to copy and distribute modified ver-
       sions of this manual page under the conditions for  verba-
       tim  copying,  provided  that the entire resulting derived
       work is distributed under the terms of a permission notice
       identical to this one.

       Permission  is granted to copy and distribute translations
       of this manual page into another language, under the above
       conditions for modified versions, except that this permis-
       sion notice may be stated in a translation approved by the
       Foundation.



Free Software Foundation   May 17 2000                    GAWK(1)

ABELNET VPSサービス