コマンドラインのマニュアル

Man » awk マニュアル オンライン - awk man ページの詳細なオンライン ドキュメント

🌍
gawk - パターン検索および処理言語

概要

gawk [POSIX または GNU スタイルのオプション] -f program-file [ -- ] file ...
gawk [POSIX または GNU スタイルのオプション] [ -- ] program-text file ...

最初に読んでください

この man ページは便宜のために提供されています。gawk の唯一の情報源は、https://www.gnu.org/software/gawk/manual でオンラインで利用可能なさまざまな形式の Texinfo マニュアルです。また、Info サブシステムにインストールされている場合があり、info(1) コマンドを使用して利用できる場合があります。

Texinfo マニュアルとこの man ページに矛盾がある場合は、マニュアルを公式なものとして参照してください。

説明

Gawk は、GNU プロジェクトによる AWK プログラミング言語の実装です。これは、POSIX 1003.1 規格に記載されている言語の定義に準拠しています。このバージョンは、Aho、Kernighan、および Weinberger による The AWK Programming Language の説明に基づいています。Gawk は、Brian Kernighan の awk の現在のバージョンに見られる追加機能と、多数の GNU 固有の拡張機能を備えています。

コマンド行は、gawk 自体へのオプション、AWK プログラム テキスト (-f または --include オプションで提供されていない場合)、および ARGC および ARGV プリ定義の AWK 変数で利用できるようにする値で構成されます。

序文

この man ページは、できるだけ簡潔に記述されています。完全な詳細は、GAWK: Effective AWK Programming に記載されており、特定の機能に関する完全な情報は、そこに記載されています。可能な場合は、オンライン マニュアルへのリンクを提供します。

オプション形式

Gawk オプションは、従来の POSIX スタイルの 1 文字のオプション、または GNU スタイルの長いオプションのいずれかです。POSIX オプションは単一の「-」で始まり、長いオプションは「--」で始まります。長いオプションは、GNU 固有の機能と POSIX で義務付けられている機能の両方に対して提供されます。

Gawk 固有のオプションは、通常、長いオプションの形式で使用されます。長いオプションへの引数は、等号「=」でオプションに結合され、間にスペースがないか、次のコマンド行の引数として提供されます。長いオプションは、省略できます。ただし、省略形が一意である必要があります。

さらに、すべての長いオプションには対応する短いオプションがあり、これにより、オプションの機能を #! 実行可能スクリプトで使用できます。

オプション

Gawk は、次のオプションを受け入れます。標準オプションは最初にリストされ、次に gawk 拡張機能のオプションが短いオプションのアルファベット順にリストされます。

-f program-file, --file program-file
コマンド行の最初の引数の代わりに、ファイル program-file から AWK プログラム ソースを読み込みます。複数の -f オプションを使用できます。-f で読み込まれたファイルは、暗黙の @namespace "awk" ステートメントで始まるものとして扱われます。

-F fs, --field-separator fs
入力フィールドの区切り文字として fs を使用します (FS という名前の事前定義された変数の値)。

-v var=val, --assign var=val
プログラムの実行開始前に、変数 var に値 val を割り当てます。
これらの変数値は、AWK プログラムの BEGIN ルールで使用できます。

-b, --characters-as-bytes
すべての入力データを単一バイト文字として扱います。 --posix オプションはこれを上書きします。

-c, --traditional
互換モードで実行します。 互換モードでは、gawk は Brian Kernighan の awk とまったく同じように動作し、GNU 固有の拡張機能は認識されません。

-C, --copyright
GNU の短い著作権情報を標準出力に出力し、正常に終了します。

-d[file], --dump-variables[=file]
グローバル変数、その型、および最終値をソートされたリストとしてファイルに出力します。 デフォルトのファイルは、現在のディレクトリにある awkvars.out です。

-D[file], --debug[=file]
AWK プログラムのデバッグを有効にします。 デフォルトでは、デバッガーはキーボード (標準入力) から対話的にコマンドを読み取ります。 オプションのファイル引数は、デバッガーが非対話的に実行するコマンドのリストを含むファイルを指定します。
この実行モードでは、gawk は AWK ソースコードをロードしてから、デバッグコマンドの入力を求めます。 gawk は、-f および --include オプションで提供された AWK プログラムのソースのみをデバッグできます。 デバッガーは、GAWK: Effective AWK Programming に記載されています。 https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger を参照してください。

-e program-text, --source program-text
program-text を AWK プログラムのソースコードとして使用します。 -e オプションで提供される各引数は、暗黙的な @namespace "awk" ステートメントで始まるように処理されます。

-E file, --exec file
-f と似ていますが、このオプションは最後に処理されます。 これは、特に CGI アプリケーションで、コマンドラインからオプションまたはソースコード (!) を URL 経由で渡すのを避けるために、#! スクリプトで使用する必要があります。 このオプションは、コマンドラインの変数割り当てを無効にします。

-g, --gen-pot
AWK プログラムをスキャンおよび解析し、プログラム内のすべてのローカリゼーション可能な文字列のエントリを含む GNU .pot (Portable Object Template) 形式のファイルを標準出力に出力します。 プログラム自体は実行されません。

-h, --help
利用可能なオプションの比較的短い概要を標準出力に出力します。 GNU コーディング標準に従い、これらのオプションは直ちに正常に終了します。

-i include-file, --include include-file
awk ソースライブラリをロードします。 これにより、AWKPATH 環境変数を使用してライブラリを検索します。 最初の検索が失敗した場合、.awk サフィックスを付けて再度試行します。 ファイルは 1 回だけロードされます (つまり、重複は削除されます)。 また、コードはメインプログラムのソースとは見なされません。 --include で読み取られたファイルは、暗黙的な @namespace "awk" ステートメントで始まるように扱われます。

-I, --trace

プログラム実行時に、内部バイトコード名が実行されるたびに標準エラーに出力します。 各「オペコード」は、出力の先頭に「+」記号が付加されます。

-k, --csv

CSV特殊処理を有効にします。詳細については、以下に示す「カンマ区切り値」を参照してください。

-l lib, --load lib

共有ライブラリlibからgawk拡張をロードします。AWKLIBPATH環境変数を使用してライブラリを検索します。最初の検索が失敗した場合、プラットフォームのデフォルトの共有ライブラリ接尾辞を追加して、再度試行します。ライブラリの初期化ルーチンは、dl_load()という名前であることが予想されます。

-L [value], --lint[=value]

疑わしい、または他のAWK実装への移植性が低い可能性がある構成について警告します。可能な値については、[https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options]を参照してください。

-M, --bignum

数値に対して任意の精度の算術を強制します。このオプションは、gawkがGNU MPFRおよびGMPライブラリを使用してコンパイルされていない場合、効果がありません。(そのような場合、gawkは警告を発行します。)

注意:この機能は保留中です。主要なgawkメンテナーは、これ以上サポートしていません。ただし、開発チームのメンバーがサポートしています。この状況が変わった場合、この機能はgawkから削除されます。

-n, --non-decimal-data

入力データ内の8進数および16進数を認識します。このオプションは、注意して使用してください。

-N, --use-lc-numeric

gawkが入力データの解析時に、ロケールの小数点文字を使用するように強制します。

-o[file], --pretty-print[=file]

プログラムの整形されたバージョンをファイルに出力します。デフォルトのファイルは、現在のディレクトリのawkprof.outです。このオプションは、--no-optimizeを意味します。

-O, --optimize

gawkのデフォルトの最適化を、プログラムの内部表現に対して有効にします。このオプションは、デフォルトで有効になっています。

-p[prof-file], --profile[=prof-file]

プロファイリングセッションを開始し、プロファイリングデータをprof-fileに送信します。デフォルトは、現在のディレクトリのawkprof.outです。プロファイルには、プログラム内の各ステートメントの実行回数(左マージン)と、ユーザー定義関数の呼び出し回数が含まれます。gawkはこのモードで実行されると、速度が低下します。このオプションは、--no-optimizeを意味します。

-P, --posix

互換モードをオンにし、いくつかの一般的な拡張機能を無効にします。

-r, --re-interval

正規表現マッチングで、間隔表現の使用を有効にします。間隔表現はデフォルトで有効になっていますが、このオプションは後方互換性のために残されています。

-s, --no-optimize

gawkのデフォルトの最適化を、プログラムの内部表現に対して無効にします。

-S, --sandbox

gawkをサンドボックスモードで実行し、system()関数、getlineによる入力のリダイレクト、printおよびprintfによる出力のリダイレクト、および動的拡張のロードを無効にします。コマンドの実行(パイプライン経由)も無効になります。


-t, --lint-old
元の UNIX awk に移植できない構文について警告を表示します。

-V, --version
この gawk のバージョン情報を標準出力に出力します。これは、バグを報告する際に役立ちます。GNU コーディング規約により、これらのオプションは直ちに正常に終了します。

--
オプションの終了を示します。これにより、AWK プログラム自体への追加の引数が「-」で始まるようにすることができます。

互換モードでは、他のすべてのオプションが無効とフラグが立てられますが、それ以外は無視されます。 通常モードでは、プログラムテキストが指定されている限り、不明なオプションは AWK プログラムに ARGV 配列で渡され、処理されます。

POSIX 互換性のために、-W オプションの後に長いオプションの名前を指定して使用できます。

AWK プログラムの実行

AWK プログラムは、オプションのディレクティブ、パターンアクションステートメント、およびオプションの関数定義のシーケンスで構成されます。

@include "filename"
@load "filename"
@namespace "name"
pattern { action statements }
function name(parameter list) { statements }

Gawk は、最初に指定されたプログラムファイル、--source への引数、またはコマンドラインの最初の非オプション引数からプログラムソースを読み取ります。-f および --source オプションは、コマンドラインで複数回使用できます。Gawk は、すべてのプログラムファイルとコマンドラインのソーステキストを連結したかのようにプログラムテキストを読み取ります。

さらに、@include で始まる行を使用して、他のソースファイルをプログラムに含めることができます。これは、--include オプションを使用するのと同じです。

@load で始まる行を使用して、拡張関数をプログラムにロードできます。これは、--load オプションを使用するのと同じです。

環境変数 AWKPATH は、-f および --include オプションで名前が指定されたソースファイルを検索する際に使用する検索パスを指定します。この変数が存在しない場合、デフォルトのパスは「./usr/local/share/awk」です。(実際のディレクトリは、gawk のビルドおよびインストール方法によって異なる場合があります。)-f オプションに指定されたファイル名に「/」文字が含まれている場合、パス検索は実行されません。

環境変数 AWKLIBPATH は、--load オプションで名前が指定されたソースファイルを検索する際に使用する検索パスを指定します。この変数が存在しない場合、デフォルトのパスは「/usr/local/lib/gawk」です。(実際のディレクトリは、gawk のビルドおよびインストール方法によって異なる場合があります。)

Gawk は、AWK プログラムを次の順序で実行します。まず、-v オプションで指定されたすべての変数割り当てが実行されます。次に、gawk はプログラムを内部形式にコンパイルします。次に、gawk は BEGIN ルール(存在する場合)のコードをすべて実行し、その後、ARGV 配列に名前が付けられている各ファイルを読み取ります(ARGV[ARGC-1] まで)。コマンドラインにファイル名が指定されていない場合、gawk は標準入力を読み取ります。

コマンドラインのファイル名が var=val の形式の場合、これは変数割り当てとして扱われます。変数 var には値 val が割り当てられます。(これは、BEGIN ルールの実行後に発生します。)


ARGV の特定の要素の値が空文字列 ("") の場合、gawk はそれをスキップします。

各入力ファイルについて、BEGINFILE ルールが存在する場合、gawk は関連付けられたコードをファイルの内容を処理する前に実行します。同様に、gawk は ENFILE ルールに関連付けられたコードを、ファイルの処理後に実行します。

入力の各レコードについて、gawk はそのレコードが AWK プログラム内のいずれかのパターンに一致するかどうかをテストします。レコードが一致する各パターンについて、gawk は関連付けられたアクションを実行します。パターンは、プログラム内で現れる順にテストされます。

最後に、すべての入力が処理されると、gawk は END ルール(存在する場合)内のコードを実行します。

コマンドラインディレクトリ

POSIX によると、awk コマンドラインで名前が指定されたファイルは、テキストファイルでなければなりません。そうでない場合、動作は「未定義」です。ほとんどの awk バージョンでは、コマンドライン上のディレクトリは致命的なエラーとして扱われます。

gawk では、コマンドライン上のディレクトリは警告を生成しますが、それ以外の場合はスキップされます。--posix または --traditional オプションのいずれかが指定された場合、gawk はコマンドライン上のディレクトリを致命的なエラーとして扱うように戻ります。

変数、レコード、およびフィールド

AWK 変数は動的です。それらは最初に使用されたときに存在し始めます。それらの値は、浮動小数点数または文字列、またはそれらの両方であり、使用方法によって異なります。さらに、gawk では、変数は正規表現型を持つことができます。AWK には 1 次元の配列もあります。複数の次元を持つ配列はシミュレートできます。ただし、gawk は配列の配列を提供します。いくつかの事前定義された変数は、プログラムの実行中に設定されます。これらは必要に応じて説明され、以下に要約されます。

レコード

通常、レコードは改行文字で区切られます。組み込み変数 RS に値を割り当てることで、レコードの区切り方を制御できます。詳細は、[https://www.gnu.org/software/gawk/manual/html_node/Records.html] を参照してください。

フィールド

各入力レコードが読み込まれると、gawk はレコードをフィールドに分割し、変数 FS の値をフィールド区切り文字として使用します。さらに、FIELDWIDTHS および FPAT を使用して、入力フィールドの分割を制御することもできます。詳細は、[https://www.gnu.org/software/gawk/manual/html_node/Fields.html] を参照してください。

入力レコード内の各フィールドは、その位置で参照できます: $1、$2 など。 $0 は、先頭と末尾の空白を含む完全なレコードです。

変数 NF は、入力レコード内のフィールドの合計数に設定されます。

存在しないフィールド(つまり、$NF より後のフィールド)を参照すると、null 文字列が生成されます。ただし、存在しないフィールドに値を割り当てると(例: $(NF+2) = 5)、NF の値が増加し、null 文字列が値として割り当てられた中間フィールドが作成され、$0 の値が再計算され、フィールドは OFS の値で区切られます。負の番号のフィールドを参照すると、致命的なエラーが発生します。NF をデクリメントすると、新しい値より後のフィールドの値が失われ、$0 の値が再計算され、フィールドは OFS の値で区切られます。


既存のフィールドに値を割り当てると、$0 が参照されたときにレコード全体が再構築されます。同様に、$0 に値を割り当てると、レコードが再分割され、フィールドに新しい値が作成されます。

カンマ区切り値

^ k または --csv オプションで呼び出した場合、gawk は上記で説明した通常のレコード決定およびフィールド分割を使用しません。代わりに、レコードは引用符で囲まれていない改行で区切られ、フィールドはコンマで区切られます。二重引用符を使用して、コンマ、改行、または二重引用符自体を含むフィールドを囲むことができます。詳細については、[https://www.gnu.org/software/gawk/manual/html_node/Comma-Separated-Fields.html] を参照してください。

組み込み変数

Gawk の組み込み変数は以下にリストされています。このリストは意図的に簡潔です。詳細については、[https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables.html] を参照してください。

ARGC コマンドライン引数の数。

ARGIND 処理中の現在のファイルの ARGV のインデックス。

ARGV コマンドライン引数の配列。配列は 0 から ARGC - 1 でインデックス付けされます。

BINMODE POSIX 以外のシステムでは、すべてのファイル I/O で「バイナリ」モードを使用することを指定します。詳細については、[https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html] を参照してください。

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

ENVIRON 現在の環境の値を含む配列。配列は、環境変数ごとにインデックス付けされ、各要素はその変数の値です。

ERRNO `getline` のリダイレクト中、`getline` の読み取り中、または `close()` 中にシステムエラーが発生した場合、ERRNO はエラーを記述する文字列に設定されます。値は、非英語ロケールで翻訳される場合があります。

FIELDWIDTHS 空白で区切られたフィールド幅のリスト。設定すると、gawk は入力の解析を、FS 変数の値をフィールド区切り文字として使用する代わりに、固定幅のフィールドに実行します。各フィールド幅は、オプションで、フィールドの開始前にスキップする文字数を指定するコロンで区切られた値でプレフィックスを付けることができます。

FILENAME 現在の入力ファイルの名前。コマンドラインでファイルが指定されていない場合、FILENAME の値は "-" です。ただし、FILENAME は BEGIN ルール内では定義されていません (ただし、`getline` で設定されている場合)。

FNR 現在の入力ファイルの入力レコード番号。

FPAT レコード内のフィールドの内容を記述する正規表現。設定すると、gawk は入力を解析して、フィールドが正規表現に一致するようにします。FS の値をフィールド区切り文字として使用する代わりに、入力の解析を実行します。

FS 入力フィールド区切り文字。デフォルトはスペースです。詳細については、[https://www.gnu.org/software/gawk/manual/html\_node/Field-Separators.html] を参照してください。

FUNCTAB これは、プログラム内のすべてのユーザー定義関数または拡張関数の名前をインデックスとし、対応する値を値とする配列です。注意:FUNCTAB配列に対してdeleteステートメントを使用することはできません。

IGNORECASE  すべての正規表現および文字列操作における大文字と小文字の区別を制御します。詳細は、[https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html]を参照してください。

LINT        AWKプログラム内から--lintオプションを動的に制御します。

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

NR      これまでに処理された入力レコードの合計数。

OFMT        数値の出力形式。デフォルトは"%.6g"です。

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

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

PREC        任意の精度の浮動小数点数の作業精度。デフォルトは53です。

PROCINFO    この配列の要素は、実行中のAWKプログラムに関する情報へのアクセスを提供します。詳細は、[https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset]を参照してください。

ROUNDMODE   数値の任意の精度算術で使用する丸めモード。デフォルトは"N"(IEEE-754 roundTiesToEvenモード)です。詳細は、[https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode]を参照してください。

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

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

RSTART      match()によって最初に一致した文字のインデックス。一致しない場合は0。

RLENGTH     match()によって一致した文字列の長さ。一致しない場合は-1。

SUBSEP      配列要素内の複数のサブスクリプトを区切るために使用される文字列。デフォルトは"\034"です。

SYMTAB      これは、プログラムで現在定義されているすべてのグローバル変数と配列の名前をインデックスとし、それらの値を持つ配列です。SYMTAB配列に対してdeleteステートメントを使用することはできません。また、変数名ではないインデックスに値を割り当てることもできません。

TEXTDOMAIN  AWKプログラムのテキストドメイン。プログラムの文字列のローカライズされた翻訳を見つけるために使用されます。

配列

配列は、角括弧([と])で囲まれた式でサブスクリプト化されます。式が式リスト(expr, expr ...)の場合、配列のサブスクリプトは、各式の(文字列)値が連結され、SUBSEP変数の値で区切られた文字列になります。この機能は、多次元配列をシミュレートするために使用されます。例:

i = "A"; j = "B"; k = "C"
x[i, j, k] = "hello, world\n"

これは、文字列"hello, world\n"を、文字列"A\034B\034C"でインデックス付けされた配列xの要素に割り当てます。AWK内のすべての配列は、連想型であり、つまり文字列値でインデックス付けされます。

特殊演算子inを使用して、配列が特定の値でインデックス付けされているかどうかをテストできます。


if (val in array)
    print array[val]

配列に複数の添え字がある場合は、(i, j) in array を使用します。

in 構造は、配列のすべての要素を反復処理するために for ループで使用することもできます。 ただし、(i, j) in array 構造はテストでのみ機能し、for ループでは機能しません。

配列から要素は、delete ステートメントを使用して削除できます。 delete ステートメントは、 配列名を添え字なしで指定するだけで、配列のすべての内容を削除するためにも使用できます。

gawk は、真の多次元配列をサポートしています。C または C++ のように、これらの配列が「長方形」である必要はありません。詳細は、[https://www.gnu.org/software/gawk/manual/html_node/Arrays] を参照してください。

名前空間

gawk は、AWK のすべての変数がグローバルであるという事実に対処するために役立つ、単純な名前空間機能を提供します。

修飾名とは、2 つの単純な識別子がコロン (::) で結合されたものです。左側の識別子は名前空間を表し、右側の識別子は名前空間内の変数です。 すべての単純な(修飾されていない)名前は、「現在の」名前空間にあると見なされます。デフォルトの 名前空間は awk です。ただし、大文字のみで構成される単純な識別子は、現在の名前空間が異なっていても、強制的に awk 名前空間に配置されます。

現在の名前空間は、@namespace "name" ディレクティブを使用して変更します。

標準の事前定義済み組み込み関数名は、名前空間名として使用することはできません。gawk によって提供される追加の関数の名前は、名前空間名として、または他の名前空間の単純な識別子として使用できます。詳細については、[https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces] を参照してください。

変数の型付けと変換

変数とフィールドは、(浮動小数点)数値、文字列、またはその両方である可能性があります。また、正規表現である可能性もあります。変数の値の解釈は、そのコンテキストによって異なります。数値式で使用される場合、数値として扱われます。文字列として使用される場合は、文字列として扱われます。

変数を数値として強制的に扱うには、ゼロをそれに加えます。文字列として強制的に扱うには、ヌル文字列に連結します。

初期化されていない変数は、数値で 0、文字列で ""(ヌルまたは空の文字列)という値を持っています。

文字列を数値に変換する必要がある場合、変換は strtod(3) を使用して行われます。 数値を文字列に変換するには、CONVFMT の値を sprintf(3) の形式文字列として使用し、変数の数値値を引数として使用します。ただし、AWK のすべての数値が浮動小数点であるにもかかわらず、整数の値は常に整数として変換されます。

gawk は、次の比較を実行します。2 つの変数が数値である場合、それらは数値的に比較されます。一方の値が数値で、もう一方の値が「数値文字列」である場合、比較も数値的に行われます。それ以外の場合、数値は文字列に変換され、文字列比較が実行されます。2 つの文字列は、もちろん文字列として比較されます。


文字列定数(例:「57」)は数値文字列ではありません。それらは文字列定数です。 「数値文字列」という概念は、フィールド、getline入力、FILENAME、ARGV要素、およびsplit()またはpatsplit()によって作成された配列の要素にのみ適用されます。これらは数値文字列です。 基本的な考え方は、ユーザー入力であり、数値に見えるユーザー入力のみを、そのように扱う必要があるということです。

8進数および16進数定数

AWKプログラムのソースコードで、Cスタイルの8進数および16進数定数を使用できます。たとえば、8進数の値011は10進数の9に等しく、16進数の値0x11は10進数の17に等しくなります。

文字列定数

AWKの文字列定数は、二重引用符(例:「value」)で囲まれた文字のシーケンスです。文字列内では、Cと同様に、特定の escape シーケンスが認識されます。詳細は、[https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences] を参照してください。

正規表現定数

正規表現定数は、スラッシュで囲まれた文字のシーケンスです(例:/value/)。 constant regular expressions(定数正規表現)内でも、マニュアルで説明されている escape シーケンスを使用できます(例:/[ \t\f\n\r\v]/ は空白文字に一致します)。

Gawkは、厳密に型付けされた正規表現定数を提供します。これらは、先頭に@記号(例:@/value/)が付いています。これらの定数は、スカラー(変数、配列要素)に割り当てたり、ユーザー定義関数に渡したりできます。このように割り当てられた変数は、正規表現型を持ちます。

パターンとアクション

AWKは、行指向の言語です。まずパターンが来て、次にアクションが来ます。アクションステートメントは、{と}で囲まれます。パターンまたはアクションのいずれかを省略できますが、両方を省略することはできません。パターンが省略された場合、アクションは入力のすべてのレコードに対して実行されます。省略されたアクションは、{ print }と同等であり、これはレコード全体を出力します。

コメントは、#文字で始まり、行末まで続きます。空行を使用してステートメントを区切ることができます。通常、ステートメントは改行で終わりますが、カンマ、{、?、:、&&、または||で終わる行は例外です。doまたはelseで終わる行も、ステートメントが次の行に自動的に続行されます。その他の場合、行を「\」で終了すると、改行が無視されるため、行を継続できます。ただし、#の後の「\」は特別な意味を持ちません。

複数のステートメントを1つの行に配置するには、セミコロン「;」で区切ります。これは、パターン-アクションペアのアクション部分(通常の場合)と、パターン-アクションステートメント自体に適用されます。

パターン

AWKパターンは、次のいずれかになります。

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

BEGIN および END は、入力に対してテストされない特別な種類のパターンです。すべての BEGIN パターンのアクション部分は、すべてのステートメントが単一の BEGIN ルールに記述されているかのようにマージされます。これらは、入力の読み込み前に実行されます。同様に、すべての END ルールはマージされ、すべての入力が使い果たされたとき(または exit ステートメントが実行されたとき)に実行されます。

BEGIN および END パターンは、他のパターンとパターン式で組み合わせることはできません。BEGIN および END パターンは、アクション部分がないことはできません。

BEGINFILE および ENDFILE は、追加の特別なパターンであり、それぞれ、コマンドライン入力ファイルの最初のレコードを読み込む前に、および各ファイルの最後のレコードを読み込んだ後に、それぞれのアクションが実行されます。BEGINFILE ルール内では、ERRNO の値は、ファイルが正常に開かれた場合は空の文字列です。そうでない場合は、ファイルに何らかの問題があり、コードは nextfile を使用してスキップする必要があります。そうしない場合、gawk は、開くことができないファイルに対して通常のエラーを生成します。

/正規表現/ パターンの場合、関連するステートメントは、正規表現に一致する各入力レコードに対して実行されます。正規表現は、基本的に egrep(1) の正規表現と同じです。詳細については、[https://www.gnu.org/software/gawk/manual/html_node/Regexp.html] を参照してください。

リレーショナル式では、以下のアクションセクションで定義されている演算子を使用できます。これらは、特定のフィールドが特定の正規表現に一致するかどうかをテストします。

&&、||、および ! 演算子は、それぞれ C の論理 AND、論理 OR、および論理 NOT です。これらはショートサーキット評価を実行し、C と同様に、より基本的なパターン式を組み合わせるために使用されます。ほとんどの言語と同様に、括弧を使用して評価順序を変更できます。

?: 演算子は、C の同じ演算子と同様です。最初のパターンが真の場合、テストに使用されるパターンは 2 番目のパターンになります。そうでない場合は、3 番目のパターンになります。2 番目と 3 番目のパターンのうち、1 つだけが評価されます。

pattern1, pattern2 という形式の式は、範囲パターンと呼ばれます。これは、pattern1 に一致するレコードから始まり、pattern2 に一致するレコードまで(両端を含む)のすべての入力レコードに一致します。これは、他の種類のパターン式と組み合わせることはできません。

アクション

アクションステートメントは、{ および } で囲まれます。アクションステートメントは、ほとんどの言語で見られる通常の代入、条件、およびループステートメントで構成されます。利用可能な演算子、制御ステートメント、および入出力ステートメントは、C のものをモデルにしています。

演算子

AWK の演算子は、優先順位の降順に次のとおりです。

(...) グループ化

$ フィールド参照

++ -- 前置および後置のインクリメントおよびデクリメント

^ 指数

+ - ! 単項プラス、単項マイナス、および論理否定

* / %       乗算、除算、および剰余。

+ -         加算と減算。

space       文字列の連結。

|   |&      `getline`、`print`、および `printf` のためのパイプ入出力。

< > <= >= == !=
通常の比較演算子。

~ !~        正規表現マッチ、否定マッチ。

in          配列のメンバーシップ。

&&          論理 AND。

||          論理 OR。

?:          Cの条件式。これは `expr1 ? expr2 : expr3` という形式です。`expr1` が真の場合、式の値は `expr2` になり、それ以外の場合は `expr3` になります。`expr2` と `expr3` のうち、いずれか一方だけが評価されます。

= += -= *= /= %= ^=

代入。絶対代入 (var = value) と演算子代入 (その他の形式) の両方がサポートされています。

制御文

制御文は以下のとおりです。

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 }
switch (expression) {
case value|regex : statement
...
[ default: statement ]
}

入出力文

入出力文は以下のとおりです。

close(file [, how])   開いているファイル、パイプ、またはコプロセスを閉じます。オプションの `how` は、コプロセスの両方向パイプの一端を閉じるときにのみ使用する必要があります。これは文字列の値で、`"to"` または `"from"` のいずれかでなければなりません。

getline               次の入力レコードから `$0` を設定し、`NF`、`NR`、`FNR`、`RT` を設定します。

getline <file         ファイルからの次のレコードから `$0` を設定し、`NF`、`RT` を設定します。

getline var           次の入力レコードから `var` を設定し、`NR`、`FNR`、`RT` を設定します。

getline var <file     ファイルからの次のレコードから `var` を設定し、`RT` を設定します。

command | getline [var]

コマンドを実行し、出力を $0 または var にパイプで渡し、RT を設定します。

command |& getline [var]

コマンドをコプロセスとして実行し、出力を $0 または var にパイプで渡し、RT を設定します。(コマンドはソケットにすることもできます。下記「特殊なファイル名」を参照してください。)

fflush([file])        開いている出力ファイルまたはパイプファイルに関連付けられたバッファをフラッシュします。`file` が存在しない場合、または空の文字列の場合、すべての開いている出力ファイルとパイプをフラッシュします。

next                  現在の入力レコードの処理を停止します。次の入力レコードを読み込み、AWK プログラムの最初のパターンから処理を再開します。入力データの終わりに達した場合、`END` ルールをすべて実行します。

nextfile              現在の入力ファイルの処理を停止します。次に読み込まれる入力レコードは、次の入力ファイルから取得されます。`FILENAME` と `ARGIND` を更新し、`FNR` を 1 にリセットし、AWK プログラムの最初のパターンから処理を再開します。入力データの終わりに達した場合、`ENDFILE` ルールと `END` ルールをすべて実行します。

print                 現在のレコードを出力します。出力レコードは `ORS` の値で終了します。

print expr-list       式を出力します。各式は `OFS` の値で区切られます。出力レコードは `ORS` の値で終了します。

print 式のリスト >ファイル ファイルに式を出力します。各式は OFS の値で区切られます。出力レコードは ORS の値で終了します。

printf 形式, 式のリスト 形式を指定して出力します。

printf 形式, 式のリスト >ファイル
ファイルに形式を指定して出力します。

system(コマンドライン) コマンドライン cmd-line を実行し、終了ステータスを返します。(これは POSIX 以外のシステムでは利用できない場合があります。)詳細は、[https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions] を参照してください。

print と printf に対して、追加の出力リダイレクトが許可されます。

print ... >> ファイル
ファイルに追記します。

print ... | コマンド
パイプに出力します。

print ... |& コマンド
コプロセスまたはソケットにデータを送信します。(「特殊なファイル名」のサブセクションも参照してください。)

getline 関数は、成功した場合は 1、ファイルの終わりに達した場合は 0、エラーが発生した場合は -1 を返します。errno(3) の値が I/O 操作を再試行できることを示す場合、および PROCINFO["input", "RETRY"] が設定されている場合、-1 の代わりに -2 が返され、getline に対する追加の呼び出しが試行されることがあります。エラーが発生した場合、ERRNO に問題の説明を示す文字列が設定されます。

注意:2 方向ソケットを開く際に失敗すると、呼び出し関数に致命的でないエラーが返されます。パイプ、コプロセス、またはソケットを使用して getline を実行する場合、または print または printf をループ内で使用する場合は、close() を使用してコマンドまたはソケットの新しいインスタンスを作成する必要があります。AWK は、パイプ、ソケット、またはコプロセスが EOF を返したときに、それらを自動的に閉じません。

AWK の printf ステートメントと sprintf() 関数のバージョンは、C のものと似ています。詳細は、[https://www.gnu.org/software/gawk/manual/html_node/Printf.html] を参照してください。

特殊なファイル名

print または printf からファイルへの I/O リダイレクト、またはファイルからの getline を実行する場合、gawk は内部的に特定の特殊なファイル名を認識します。これらのファイル名は、通常はシェルから継承された開かれたファイル記述子にアクセスできます。これらのファイル名は、コマンドラインでデータファイルを名前として使用することもできます。ファイル名は次のとおりです。

- 標準入力。

/dev/stdin 標準入力。

/dev/stdout 標準出力。

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

/dev/fd/n 開かれたファイル記述子 n に関連付けられたファイル。

次の特殊なファイル名は、|& コプロセス演算子で TCP/IP ネットワーク接続を作成するために使用できます。

/inet/tcp/lport/rhost/rport
/inet4/tcp/lport/rhost/rport
/inet6/tcp/lport/rhost/rport
ローカルポート lport でリモートホスト rhost のリモートポート rport に接続するためのファイル。ポートに 0 を指定すると、システムがポートを選択します。/inet4 を使用して IPv4 接続を強制し、/inet6 を使用して IPv6 接続を強制します。プレーンな /inet はシステムデフォルトを使用します(おそらく IPv4)。2 方向 I/O 演算子でのみ使用できます。

/inet/udp/lport/rhost/rport
/inet4/udp/lport/rhost/rport
/inet6/udp/lport/rhost/rport
同様ですが、TCP/IP ではなく UDP/IP を使用します。

数値関数

AWKには、次の組み込み算術関数があります。

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

cos(expr)     expr の余弦を返します。expr はラジアンで表されます。

exp(expr)     指数関数です。

int(expr)     整数に切り捨てます。

log(expr)     自然対数関数です。

rand()        0 ≦ N < 1 の範囲で、0から1までの乱数Nを返します。

sin(expr)     expr の正弦を返します。expr はラジアンで表されます。

sqrt(expr)    expr の平方根を返します。

srand([expr]) 新しい乱数生成器のシードとして expr を使用します。expr が指定されていない場合は、現在時刻を使用します。乱数生成器の以前のシードを返します。

文字列関数

Gawk には、次の組み込み文字列関数があります。詳細は [https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html] を参照してください。

asort(s [, d [, how] ]) ソース配列 s の要素数を返します。gawk の通常の比較規則を使用して s の内容をソートし、ソートされた値 s のインデックスを 1 から始まる連続する整数に置き換えます。オプションの宛先配列 d が指定されている場合は、まず s を d に複製してから、d をソートし、ソース配列 s のインデックスは変更しません。オプションの文字列 how は、方向と比較モードを制御します。how の有効な値は、[https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions](https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions) に記載されています。s と d は同じ配列にすることができます。ただし、これは、3 番目の引数を指定する場合にのみ意味があります。

asorti(s [, d [, how] ]) ソース配列 s の要素数を返します。動作は asort() と同じですが、配列の値ではなく、配列のインデックスを使用してソートします。完了すると、配列は数値的にインデックスが付けられ、値は元のインデックスの値になります。元の値は失われるため、必要に応じて 2 番目の配列を提供して、元の値を保持してください。オプションの文字列 how の目的は、asort() と同じです。ここでも、s と d は同じ配列にすることができます。ただし、これは、3 番目の引数を指定する場合にのみ意味があります。

gensub(r, s, h [, t]) 正規表現 r とターゲット文字列 t を照合します。h が "g" または "G" で始まる文字列の場合、r のすべての照合を s で置換します。それ以外の場合、h は r の置換する照合の番号です。t が指定されていない場合は、代わりに $0 を使用します。置換テキスト s 内では、n が 1 から 9 までの数字である \n というシーケンスを使用して、n 番目の括弧で囲まれた部分式に照合されたテキストのみを示すことができます。シーケンス \0 は、文字 & と同じように、照合されたテキスト全体を表します。sub() および gsub() とは異なり、変更された文字列は関数の結果として返され、元のターゲット文字列は変更されません。

gsub(r, s [, t])        文字列tの中で、正規表現rに一致するすべての部分文字列をsに置換し、置換回数を返します。tが指定されていない場合は、$0を使用します。置換文字列に&が含まれている場合、それは実際に一致したテキストに置き換えられます。リテラルの&を取得するには、\&を使用します。(これは"\\&"と入力する必要があります。詳細は、[https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details]を参照してください。sub()、gsub()、gensub()の置換テキストにおけるアンパサンドとバックスラッシュの規則について詳しく説明されています。)

index(s, t)     文字列sの中で文字列tが出現するインデックスを返します。tが存在しない場合は0を返します。(これは、文字のインデックスが1から始まることを意味します。)

length([s])     文字列sの長さを返します。sが指定されていない場合は、$0の長さを返します。配列引数を使用すると、length()は配列内の要素数を返します。

match(s, r [, a])       文字列sの中で正規表現rが出現する位置を返し、rが存在しない場合は0を返します。また、RSTARTとRLENGTHの値を設定します。引数の順序は、~演算子と同じです:str ~ re。詳細は、[https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions](https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions)を参照してください。配列aがどのように入力されるかについても説明されています。

patsplit(s, a [, r [, seps] ])
    文字列sを配列aと区切り文字配列sepsに、正規表現rで分割し、分割されたフィールドの数を返します。要素の値は、sに一致した部分文字列です。seps[i]の値は、a[i]の後に現れた可能性のあるnull区切り文字です。seps[0]の値は、可能性のあるnullの先頭の区切り文字です。rが省略された場合、FPATが代わりに使われます。配列aとsepsは最初にクリアされます。分割は、FPATを使用したフィールド分割とまったく同じように動作します。

split(s, a [, r [, seps] ])
    文字列sを配列aと区切り文字配列sepsに、正規表現rで分割し、分割されたフィールドの数を返します。rが省略された場合、FSが代わりに使われます。配列aとsepsは最初にクリアされます。seps[i]は、a[i]とa[i+1]の間にrによって一致したフィールド区切り文字です。分割は、フィールド分割とまったく同じように動作します。

sprintf(fmt, expr-list) expr-listをfmtに従ってフォーマットし、結果の文字列を返します。

strtonum(str)       strを調べ、その数値表現を返します。strが先頭に0を持つ場合、それは8進数と見なされます。strが先頭に0xまたは0Xを持つ場合、それは16進数と見なされます。それ以外の場合は、10進数と見なします。

sub(r, s [, t])     gsub()と同様ですが、最初に一致する部分文字列のみを置換します。0または1を返します。

substr(s, i [, n])      sのiから始まる、最大n文字の部分文字列を返します。nが省略された場合、sの残りの部分を使用します。

tolower(str)        文字列strのすべての大文字を対応する小文字に変換したコピーを返します。非アルファベット文字は変更されません。

toupper(str)        文字列strのすべての小文字を対応する大文字に変換したコピーを返します。非アルファベット文字は変更されません。

Gawk はマルチバイトをサポートしています。つまり、index()、length()、substr()、および match() は、バイトではなく文字単位で動作します。

時間関数

Gawk は、タイムスタンプを取得およびフォーマットするための次の関数を提供します。詳細は、https://www.gnu.org/software/gawk/manual/html_node/Time-Functions で確認できます。

mktime(datespec [, utc-flag]) datespec を systime() が返す形式と同じタイムスタンプに変換し、その結果を返します。 utc-flag が存在し、ゼロまたは null でない場合、時間は UTC タイムゾーンにあると見なされます。そうでない場合は、時間はローカルタイムゾーンにあると見なされます。 datespec に十分な要素が含まれていないか、結果の時間が範囲外の場合、mktime() は -1 を返します。詳細は、https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions を参照してください。

strftime([format [, timestamp[, utc-flag]]]) タイムスタンプを format で指定された形式に従ってフォーマットします。 utc-flag が存在し、ゼロまたは null でない場合、結果は UTC で、そうでない場合はローカル時間になります。タイムスタンプは、systime() が返す形式と同じである必要があります。タイムスタンプが指定されていない場合、現在時刻が使用されます。format が指定されていない場合、date(1) の出力と同じデフォルト形式が使用されます。デフォルト形式は、PROCINFO["strftime"] で利用できます。利用可能な format の変換については、ISO C の strftime() 関数の仕様を参照してください。

systime() 1970-01-01 0000:00 UTC (POSIX システム) 以降の秒数として、現在時刻を返します。

ビット操作関数

Gawk は、次のビット操作関数を提供します。これらの関数は、double 型の浮動小数点値を uintmax_t 整数に変換し、操作を実行し、次に結果を浮動小数点値に戻すことによって機能します。これらの関数に負のオペランドを渡すと、致命的なエラーが発生します。

関数は次のとおりです。

and(v1, v2 [, ...]) 引数リストで指定された値のビットごとの AND を返します。少なくとも 2 つの引数が必要です。

compl(val) val のビットごとの補数を返します。

lshift(val, count) val を count ビット左にシフトした値を返します。

or(v1, v2 [, ...]) 引数リストで指定された値のビットごとの OR を返します。少なくとも 2 つの引数が必要です。

rshift(val, count) val を count ビット右にシフトした値を返します。

xor(v1, v2 [, ...]) 引数リストで指定された値のビットごとの XOR を返します。少なくとも 2 つの引数が必要です。

型関数

次の関数は、その引数に関する型情報を提供します。

isarray(x) x が配列の場合は true、そうでない場合は false を返します。

typeof(x) x の型を示す文字列を返します。文字列は、"array"、"number"、"regexp"、"string"、"strnum"、"unassigned"、または "undefined" のいずれかになります。


国際化関数

次の関数は、AWKプログラム内で実行時に文字列を翻訳するために使用できます。 詳細については、[https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions] を参照してください。

bindtextdomain(directory [, domain])

gawkが.gmoファイルを検索するディレクトリを指定します。 これは、.gmoファイルを「標準」の場所に配置できない場合、または配置したくない場合に使用します。 domainが「バインド」されているディレクトリを返します。 デフォルトのドメインは、TEXTDOMAINの値です。 directoryが空文字列("")の場合、bindtextdomain()は、指定されたドメインに対する現在のバインディングを返します。

dcgettext(string [, domain [, category]])
テキストドメインdomainのロケールカテゴリcategoryにおける、文字列stringの翻訳を返します。 domainのデフォルト値は、現在のTEXTDOMAINの値です。 categoryのデフォルト値は、"LC_MESSAGES"です。

dcngettext(string1, string2, number [, domain [, category]])
テキストドメインdomainのロケールカテゴリcategoryにおいて、string1とstring2の翻訳の、numberに対する複数形を返します。 domainのデフォルト値は、現在のTEXTDOMAINの値です。 categoryのデフォルト値は、"LC_MESSAGES"です。

ブール値関数

特殊なブール型値を作成できます。 詳細については、マニュアルを参照してください。

mkbool(expression)

expressionのブール値に基づいて、真の値または偽の値を返します。 真の値は数値1を持ち、偽の値は数値0を持ちます。

ユーザー定義関数

AWKの関数は次のように定義されます。

function name(parameter list) { statements }

関数は、パターンまたはアクションの式内で呼び出されたときに実行されます。 関数呼び出しで提供される実際のパラメータは、関数で宣言された形式パラメータをインスタンス化するために使用されます。 配列は参照渡し、他の変数は値渡しで渡されます。

ローカル変数は、パラメータリスト内の追加のパラメータとして宣言されます。 慣例として、ローカル変数と実際のパラメータを、パラメータリスト内の追加のスペースで区切ります。 例:

function f(p, q,     a, b)   # aとbはローカル変数
{
...
}

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

関数呼び出しの左括弧は、関数名の直後に、間に空白を入れずに配置する必要があります。 この制限は、上記にリストされている組み込み関数には適用されません。

関数は互いに呼び出すことができ、再帰的にもすることができます。 関数パラメータとして使用されるローカル変数は、関数呼び出し時に空文字列と数値0に初期化されます。

return exprを使用して、関数から値を返します。 値が提供されない場合、または関数が末尾まで実行されて終了する場合は、戻り値は未定義になります。

関数を間接的に呼び出すことができます。 これを行うには、呼び出す関数の名前を文字列として変数に割り当てます。 次に、変数を関数名のように使用し、@記号を付けてプレフィックスを付けます。 function myfunc() { print "myfunc called" ... }


{    ...
the_func = "myfunc"
@the_func()    # the_func を通じて myfunc を呼び出す
...
}

--lint が指定されている場合、gawk は解析時に未定義の関数呼び出しについて警告します。代わりに、実行時に警告するのではなく、実行時に未定義の関数を呼び出すと致命的なエラーが発生します。

動的に新しい関数をロードする

C または C++ で記述された新しい関数を、@load ステートメントを使用して、実行中の gawk インタープリターに動的に追加できます。詳細については、このマニュアルページを超えるため、https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions を参照してください。

シグナル

gawk プロファイラは 2 つのシグナルを受け入れます。SIGUSR1 は、プロファイルと関数呼び出しスタックをプロファイルファイル (awkprof.out または --profile オプションで指定されたファイル) にダンプし、処理を続行します。SIGHUP は、プロファイルと関数呼び出しスタックをダンプしてから gawk を終了させます。

国際化

文字列定数は、二重引用符で囲まれた文字のシーケンスです。非英語圏では、AWK プログラム内の文字列をローカル言語に翻訳する必要があることを示すことができます。そのような文字列は、AWK プログラム内で先頭にアンダースコア ("_") を付けて示します。たとえば、

gawk 'BEGIN { print "hello, world" }'

は常に hello, world を出力します。しかし、

gawk 'BEGIN { print _"hello, world" }'

はフランスで bonjour, monde を出力する場合があります。https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization を参照して、ローカライズされた AWK プログラムを作成して実行するための手順を確認してください。

GNU 拡張

Gawk には、POSIX AWK に比べて多くの拡張機能があります。これらは https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html で説明されています。すべての拡張機能を、gawk を --traditional または --posix オプションで呼び出すことで無効にできます。

環境変数

AWKPATH 環境変数を使用して、gawk が -f、--file、-i、および --include オプションと @include ディレクティブを使用してファイルを探すディレクトリのリストを指定できます。最初の検索が失敗した場合、ファイル名に .awk を追加して、パスをもう一度検索します。

AWKLIBPATH 環境変数を使用して、gawk が -l および --load オプションを使用してファイルを探すディレクトリのリストを指定できます。

GAWK_PERSIST_FILE 環境変数がある場合、これは永続的なメモリのバックストアとして使用するファイルを指定します。詳細については、GAWK: Effective AWK Programming を参照してください。

GAWK_READ_TIMEOUT 環境変数を使用して、ターミナル、パイプ、またはソケットを含む双方向通信からの入力の読み取りのタイムアウトをミリ秒単位で指定できます。

リモートホストへのソケット経由の接続では、GAWK_SOCK_RETRIES がリトライの回数を制御し、GAWK_MSEC_SLEEP がリトライ間の間隔を制御します。間隔はミリ秒単位です。usleep(3) がサポートされていないシステムでは、この値は最も近い整数の秒数に切り上げられます。

^ OSIXLY_CORRECT が環境変数に存在する場合、gawk はコマンドラインで --posix が指定された場合とまったく同じように動作します。--lint が指定されている場合、gawk はその旨を示す警告メッセージを発行します。

^ xit ステートメントが値とともに使用された場合、gawk は指定された数値で終了します。

それ以外の場合、実行中に問題が発生しなかった場合、gawk は C 定数 EXIT_SUCCESS の値で終了します。これは通常はゼロです。

エラーが発生した場合、gawk は C 定数 EXIT_FAILURE の値で終了します。これは通常は 1 です。

gawk が致命的なエラーのために終了した場合、終了ステータスは 2 です。POSIX ではないシステムでは、この値は EXIT_FAILURE にマップされる場合があります。

この man ページは gawk バージョン 5.3 に関するものです。

UNIX awk の最初のバージョンは、ベル研究所のアルフレッド・アホ、ピーター・ワインバーガー、ブライアン・カーニハンによって設計および実装されました。オザン・イギットが現在のメンテナーです。ブライアン・カーニハンは時折開発に参加します。

ポール・ルービンとジェイ・フェンラソン(フリーソフトウェア財団)は、gawk を Seventh Edition UNIX で配布された元の awk と互換性を持たせるために作成しました。ジョン・ウッズは多くのバグ修正に貢献しました。デイビッド・トルーマン(アーノルド・ロビンスの協力)は、gawk を UNIX awk の新しいバージョンと互換性を持たせるようにしました。アーノルド・ロビンスが現在のメンテナーです。

gawk への貢献者とそのドキュメントの完全なリストについては、GAWK: Effective AWK Programming を参照してください。

gawk の配布に含まれる README ファイルには、メンテナーと現在サポートされているポートに関する最新の情報が記載されています。

gawk にバグを見つけた場合は、gawkbug(1) プログラムを使用して報告してください。

バグを報告するための完全な手順は、[https://www.gnu.org/software/gawk/manual/html_node/Bugs.html] に記載されています。記載されている指示を注意深く読み、それに従って実行してください。これにより、関係者全員にとってバグの報告と解決がはるかに簡単になります。

一方、awk または gawk を使用して特定のタスクをどのように実行するかについての質問がある場合は、_ アドレスにリクエストを送信してください。

^ F オプションは、コマンドライン変数割り当て機能が提供されているため、必ずしも必要ではありません。これは、後方互換性のために残されています。

^ grep(1)sed(1)、gawkbug(1)printf(3)、および strftime(3) を参照してください。

The AWK Programming Language、第 2 版、Alfred V. Aho、Brian W. Kernighan、Peter J. Weinberger、Addison-Wesley、2023。ISBN 9-780138-269722。

GAWK: Effective AWK Programming、第 5.3 版、gawk ソースに同梱。このドキュメントの最新バージョンは、[https://www.gnu.org/software/gawk/manual] でオンラインで入手できます。


GNU gettext のドキュメントは、オンラインで https://www.gnu.org/software/gettext で入手できます。

ログイン名を持つすべてのユーザーのログイン名を印刷してソートします。

BEGIN     { FS = ":" }
{ print $1 | "sort" }

ファイル内の行数をカウントします。

{ nlines++ }
END  { print nlines }

ファイル内の各行の先頭にその行番号を付加します。

{ print FNR, $0 }

行番号と行を連結します(テーマのバリエーション)。

{ print NR, $0 }

特定の行のデータに対して外部コマンドを実行します。

tail -f access_log |
awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'

コピー許可

Copyright © 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 2024, 2025 Free Software Foundation, Inc.

このマニュアルページの正確なコピーを作成および配布する許可は、すべてのコピーに著作権表示とこの許可表示が保存されている場合に限り、与えられます。

このマニュアルページの修正版をコピーおよび配布する許可は、正確なコピーの条件の下で与えられます。ただし、結果として得られる派生作品全体は、この許可表示と同一の条件で配布される必要があります。

このマニュアルページを別の言語に翻訳してコピーおよび配布する許可は、上記の修正版の条件の下で与えられます。ただし、この許可表示は、財団が承認した翻訳で表現することができます。