Skip to main content

Gawk - Linuxコマンド - Unixコマンド

【NGSハンズオン】UNIX/Linuxとスクリプト言語 - シェルスクリプト入門 (六月 2026)

【NGSハンズオン】UNIX/Linuxとスクリプト言語 - シェルスクリプト入門 (六月 2026)
Anonim

gawkパターンスキャンと処理言語

シノプシス

ゴーク POSIXまたはGNUスタイルのオプション -f プログラムファイル -- ファイル…ゴーク POSIXまたはGNUスタイルのオプション -- プログラムテキスト ファイル…

pgawk POSIXまたはGNUスタイルのオプション -f プログラムファイル -- ファイル…pgawk POSIXまたはGNUスタイルのオプション -- プログラムテキスト ファイル…

説明

ゴーク GNUプロジェクトのAWKプログラミング言語の実装です。これは、POSIX 1003.2コマンド言語およびユーティリティ標準の言語の定義に準拠しています。このバージョンは、 AWKプログラミング言語 、Aho、Kernighan、WeinbergerによるSystem V Release 4バージョンのUNIXの追加機能 awk . ゴーク さらに最近のBell Laboratories awk 拡張機能、およびGNU固有の拡張機能が含まれています。

Pgawk プロファイルのバージョンです ゴーク 。それはあらゆる点で同じです ゴーク ただし、プログラムの実行速度が遅くなり、自動的にファイルに実行プロファイルが生成されます awkprof.out それが終わったら。を参照してください - プロフィール オプション。

コマンドラインは、 ゴーク それ自体、AWKプログラムのテキスト( -f または - ファイル オプション)、および ARGC そして ARGV あらかじめ定義されたAWK変数

オプションフォーマット

ゴーク オプションは、従来のPOSIXの1文字オプション、あるいはGNUスタイルの長いオプションのいずれかです。 POSIXオプションは単一の `` - ''で始まり、長いオプションは `` - ''で始まります。長いオプションは、GNU固有の機能とPOSIXの必須機能の両方に提供されます。

POSIX標準に従って、 ゴーク 指定されたオプションは引数を介して -W オプション。複数 -W オプションを提供することができます -W オプションには、以下に説明する対応するロングオプションがあります。ロングオプションへの引数は、オプションで = 間にスペースを入れずにサインするか、次のコマンドライン引数で指定することができます。省略形が一意であれば、長いオプションを省略することができます。

オプション

ゴーク アルファベット順に以下のオプションを受け入れます。

-F fs

--field-separator fs つかいます fs 入力フィールドセパレータの値( FS 事前定義された変数)。

-v var = ヴァル

- 割り当てます var = ヴァル 値を割り当てる ヴァル 変数に var プログラムの実行が開始される前に実行されます。そのような変数値は、 ベギン AWKプログラムのブロック。

-f プログラムファイル

- ファイル プログラムファイル ファイルからAWKプログラムのソースを読み込む プログラムファイル 、最初のコマンドライン引数からではなく。複数 -f (または - ファイル)オプションを使用することができます。

-mf NNN

-氏 NNN さまざまなメモリ制限を値に設定する NNN 。ザ f flagはフィールドの最大数を設定し、 r flagは最大レコードサイズを設定します。これらの2つのフラグと -m オプションは、Bell Laboratoriesのリサーチ・バージョンのUNIX awk 。それらは無視されます ゴーク 、以来 ゴーク あらかじめ定義された制限はありません。

-W compat

-W伝統的な

--compat

- 従来の 走る 互換性 モード。互換モードでは、 ゴーク UNIXと同じように動作する awk ; GNU固有の拡張は認識されません。の用法 - 従来の このオプションの他の形式よりも優先されます。見る GNUエクステンション詳細については、以下を参照してください。

-W copyleft

-W著作権

--copyleft

--copyright GNU著作権情報メッセージの短いバージョンを標準出力に出力し、正常に終了します。

-Wダンプ変数= ファイル

--dump-variables= ファイル ソートされたグローバル変数、その型、最終値のリストを ファイル 。ない場合 ファイル 供給される、 ゴーク 名前付きファイルを使用します。 awkvars.out 現在のディレクトリにあります。

すべてのグローバル変数のリストを持つことは、プログラムの誤植を探す良い方法です。大量の関数を持つ大規模なプログラムがあり、関数がローカルであることを意図したグローバル変数を誤って使用しないようにしたい場合は、このオプションを使用します。 (これは、簡単な変数名で作るのは特に簡単な間違いです , j、 等々。)

-W help

-Wの使用法

- 助けて

- 使用法 利用可能なオプションの比較的短い要約を標準出力に出力します。 (1人あたり GNUコーディング標準 これらのオプションは、すぐに成功する終了を引き起こします)。

-W lint=致命的

--lint=致命的他のAWK実装に対して疑わしい、または移植性のない構文についての警告を提供する。オプションの引数を指定すると 致命的なリントの警告は致命的なエラーになります。これは劇的なことかもしれませんが、その使用は、きれいなAWKプログラムの開発を確実に促すでしょう。

-Wint-old

--lint-old Unixの元のバージョンに移植できない構文についての警告を提供する awk .

-W gen-po

--gen-po AWKプログラムをスキャンして解析し、GNUを生成する .po プログラム内のすべてのローカライズ可能な文字列のエントリを含む標準出力のフォーマットファイル。プログラム自体は実行されません。 GNUを参照してください gettext より多くの情報を得るための配布 .po ファイル。

-W非小数データ

--non-decimal-data 入力データの8進数と16進数値を認識します。 このオプションは非常に注意して使用してください!

-W posix

--posix これがオンになります 互換性 次の追加制限があります。

*

バツ エスケープシーケンスは認識されません。

*

スペースとタブのみがフィールドセパレータとして機能する FS newlineは単一のスペースに設定されています。

*

後に行を続けることはできません ? そして :.

*

同義語 機能 キーワードの場合 関数 認識されません。

*

演算子 ** そして **= の代わりに使用することはできません ^ そして ^=.

*

fflush() 機能は利用できません。

-Wプロフィール= prof_file

- プロフィール= prof_file プロファイリングデータを prof_file 。デフォルトは awkprof.out。実行時 ゴーク プロファイルはプログラムの「かなり印刷された」バージョンに過ぎません。実行時 pgawk プロファイルには、左マージンのプログラム内の各ステートメントの実行カウントと、各ユーザー定義関数の関数呼び出しカウントが含まれています。

-W間隔

--re-interval 使用を有効にする 区間式 正規表現マッチングでは(see 正規表現、以下)。インターバル式はAWK言語では伝統的に利用できませんでした。 POSIX標準はそれらを追加して、 awk そして egrep お互いに一貫しています。しかし、その使用は古いAWKプログラムを壊す可能性があります。 ゴーク このオプションでリクエストされた場合のみ、または --posix 指定されています。

-Wソース プログラムテキスト

- ソース プログラムテキスト つかいます プログラムテキスト AWKプログラムのソースコードです。このオプションは、ライブラリ関数の簡単なインターミキシングを可能にします( -f そして - ファイル オプション)をコマンドラインで入力します。主に、シェルスクリプトで使用される中規模から大規模のAWKプログラムを対象としています。

-Wバージョン

- バージョン この特定のコピーのバージョン情報を表示する ゴーク 標準出力に表示されます。これは、主に ゴーク フリーソフトウェア財団が配布しているものに関しては、あなたのシステム上の最新のものです。これはバグを報告するときにも便利です。 (1人あたり GNUコーディング標準 これらのオプションは、すぐに成功する終了を引き起こします)。

-- オプションの終わりを知らせる。これは、AWKプログラム自体の引数を `` - ''で始めることができるようにするのに便利です。これは主に、他のほとんどのPOSIXプログラムで使用されている引数解析規則との一貫性のためです。

互換モードでは、他のオプションは無効とフラグされますが、それ以外の場合は無視されます。通常の操作では、プログラムテキストが提供されている限り、未知のオプションがAWKプログラムに渡されます。 ARGV 処理のための配列。これは、 ``!! ''実行可能インタプリタ機構を介してAWKプログラムを実行する場合に特に便利です。

AWKプログラム実行

AWKプログラムは、一連のパターンアクション文とオプションの関数定義で構成されています。

パターン { アクション・ステートメント }関数 ( パラメータリスト ) { ステートメント }

ゴーク まずプログラムソースを プログラムファイル 指定されている場合は、引数から - ソース、またはコマンドラインの最初の非オプション引数から取得します。ザ -f そして - ソース オプションはコマンドラインで複数回使用できます。 ゴーク あたかもすべての プログラムファイル sとコマンドラインのソーステキストが連結されていました。これは、AWK関数を使用する新しいAWKプログラムにそれらを含めることなく、AWK関数のライブラリを構築するのに便利です。また、ライブラリ関数とコマンドラインプログラムを混在させることもできます。

環境変数 AWKPATH で指定されたソースファイルを見つけるときに使用する検索パスを指定します。 -f オプション。この変数が存在しない場合、デフォルトパスは次のようになります。":/ usr / local / share / awk"。 (実際のディレクトリは、 ゴーク ビルドされ、インストールされました。) -f オプションに `` / ''文字が含まれている場合、パス検索は実行されません。

ゴーク 以下の順序でAWKプログラムを実行します。まず、 -v オプションが実行されます。次、 ゴーク プログラムを内部形式にコンパイルします。次に、 ゴーク コードを ベギン ブロック(存在する場合)をブロックし、次に ARGV アレイ。コマンドラインで指定されたファイルがない場合は、 ゴーク 標準入力を読み込みます。

コマンドライン上のファイル名の形式が var = ヴァル 変数代入として扱われます。変数 var 値が割り当てられます ヴァル 。 (これは、 ベギン コマンドライン変数の割り当ては、AWKが入力をどのようにフィールドやレコードに分割するかを制御するために変数に動的に値を割り当てる場合に最も便利です。 1つのデータファイルに複数のパスが必要な場合は、状態を制御するのにも役立ちます。

特定の要素の値が ARGV 空です(''), ゴーク それをスキップします。

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

最後に、すべての入力が使い尽くされた後、 ゴーク コードを 終わり ブロック(存在する場合)。

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

AWK変数は動的です。彼らは最初に使用されるときに存在します。それらの値は、使用方法に応じて、浮動小数点数または文字列、またはその両方です。 AWKには1次元配列もあります。複数の次元を有するアレイをシミュレートすることができる。プログラムが実行されるときにいくつかの事前定義された変数が設定されます。これらは必要に応じて説明され、以下に要約される。

記録

通常、レコードは改行文字で区切られます。組み込み変数に値を割り当てることで、レコードの区切り方を制御できます RS。もし RS その文字がレコードを区切る任意の単一の文字です。さもないと、 RS 正規表現です。この正規表現に一致する入力内のテキストがレコードを区切ります。ただし、互換モードでは、文字列値の最初の文字のみがレコードを区切るために使用されます。もし RS ヌル文字列に設定されている場合、レコードは空白行で区切られます。いつ RS がヌル文字列に設定されている場合、改行文字は常にフィールドセパレータとして機能し、 FS がある可能性があり。

フィールド

各入力レコードが読み取られると、 ゴーク レコードを分割して フィールド の値を使用して FS フィールドセパレータとしての変数。もし FS 1文字の場合、フィールドはその文字で区切られます。もし FS がヌル文字列の場合、個々の文字は個別のフィールドになります。さもないと、 FS 完全な正規表現になると期待されています。特別な場合には FS スペースは1つのスペースであり、フィールドはスペースやタブ、改行で区切られます。 (しかし、 --posix、以下)。 注意: の価値 IGNORECASE (下記参照)は、フィールドがどのように分割されるかにも影響します FS 正規表現であり、レコードが RS 正規表現です。

もし FIELDWIDTHS 変数はスペースで区切られた数字のリストに設定され、各フィールドは固定幅を持つことが期待されます。 ゴーク 指定された幅を使用してレコードを分割します。の価値 FS 無視されます。新しい値を割り当てる FS の使用を上書きする FIELDWIDTHS、デフォルトの動作を復元します。

入力レコード内の各フィールドは、その位置によって参照されてもよく、 $1, $2、 等々。 $0 全体の記録です。フィールドを定数で参照する必要はありません。

n = 5$ nを印刷する

入力レコードに5番目のフィールドを出力します。

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

存在しないフィールドへの参照(すなわち、 $ NF)はヌル文字列を生成します。しかしながら、存在しないフィールド(例えば、 $(NF + 2)= 5)は、 NFそのヌル文字列を値として持つ介入フィールドを作成し、 $0 フィールドを値で区切って再計算する OFS。負の番号のフィールドを参照すると、致命的なエラーが発生します。デクリメント NF 新しい値を超えたフィールドの値が失われ、 $0 フィールドを値で区切って再計算する OFS.

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

ビルトイン変数

ゴーク 組み込みの変数は次のとおりです。

ARGC

コマンドライン引数の数(オプションには ゴーク 、またはプログラムソース)。

ARGIND

のインデックス ARGV 現在処理されているファイルの

ARGV

コマンドライン引数の配列。配列は0から ARGC - 1.動的にコンテンツを変更する ARGV データに使用されるファイルを制御できます。

BINMODE

非POSIXシステムでは、すべてのファイルI / Oに対して ``バイナリ ''モードの使用を指定します。数値1,2または3は、入力ファイル、出力ファイル、またはすべてのファイルがそれぞれバイナリI / Oを使用するように指定します。文字列値 "r"、または "w" 入力ファイルまたは出力ファイルのそれぞれにバイナリI / Oを使用するように指定します。文字列値 "rw" または "wr" すべてのファイルでバイナリI / Oを使用するように指定します。その他の文字列値は、次のように扱われます。 "rw"警告メッセージを生成します。

CONVFMT

数字の変換フォーマット、 "%.6g"デフォルトでは、

ENVIRON

現在の環境の値を含む配列。配列は環境変数によってインデックス付けされ、各要素はその変数の値である(例えば、ENVIRON "HOME" かもしれない / home / arnold)。この配列を変更しても、プログラムによって見られる環境には影響しません。 ゴーク リダイレクトまたは システム()関数。

ERRNO

システムエラーが発生した場合、 getlinegetline、または 閉じる()、その後 ERRNO エラーを説明する文字列が含まれます。この値は、英語以外のロケールでの翻訳の対象となります。

FIELDWIDTHS

空白で区切られたフィールド幅のリスト。設定すると、 ゴーク 固定幅のフィールドに入力を解析します。 FS フィールドセパレータとしての変数。

ファイル名

現在の入力ファイルの名前。コマンドラインでファイルが指定されていない場合、 ファイル名 `` - ''です。しかしながら、 ファイル名 内部では定義されていません ベギン ブロック( getline).

FNR

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

FS

入力フィールドセパレータ。デフォルトではスペースです。見る フィールド、上記。

IGNORECASE

すべての正規表現と文字列操作の大文字と小文字の区別を制御します。もし IGNORECASE 0以外の値をとり、ルール内の文字列比較とパターンマッチング、 FSRS、正規表現とのマッチング ~そして !~、 そしてその gensub(), gsub(), index(), 一致(), スプリット()、および サブ() 組み込み関数はすべて、正規表現操作を実行するときに大文字小文字を無視します。 注意: 配列の添え字は ない 影響を受けたり、 asort() 関数。

従って、もし IGNORECASE 0に等しくない場合、 / aB / すべての文字列に一致する "ab", "aB","Ab"、および "AB"。すべてのAWK変数と同様に、 IGNORECASE すべての正規表現と文字列操作では大文字と小文字が区別されます。 Unixでは、大文字と小文字を区別しない場合、完全なISO 8859-1 Latin-1文字セットが使用されます。

LINT

の動的制御を提供します --lint AWKプログラム内からのオプション。真の場合、 ゴーク リント警告を表示します。偽の場合、それはしません。文字列値が割り当てられると "致命的"、リントの警告は致命的なエラーになります --lint = fatal。その他の真の値は警告を出力するだけです。

NF

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

NR

これまでに見た入力レコードの総数。

OFMT

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

OFS

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

ORS

出力レコード区切り文字。デフォルトで改行。

PROCINFO

この配列の要素は、実行中のAWKプログラムに関する情報へのアクセスを提供します。システムによっては、配列内に要素が存在することがありますが、 "グループ1" を通して "グループ n ' いくつかのための n これは、プロセスが持つ補足的なグループの数です。使用 これらの要素をテストします。次の要素が使用可能であることが保証されています。

PROCINFO "egid"

の価値 ゲゲゲイド (2)システムコール。

PROCINFO "euid"

の価値 ゲットーイド (2)システムコール。

PROCINFO "FS"

"FS" フィールド分割で FS 効果があるか、または "FIELDWIDTHS" フィールド分割で FIELDWIDTHS 有効です。

PROCINFO "gid"

の価値 ゲットイド (2)システムコール。

PROCINFO "pgrpid"

現在のプロセスのプロセスグループID。

PROCINFO "pid"

現在のプロセスのプロセスID。

PROCINFO "ppid"

現在のプロセスの親プロセスID。

PROCINFO "uid"

の価値 ゲットゥード (2)システムコール。

RS

入力レコード区切り文字。デフォルトで改行。

RT

レコードターミネータ。 ゴーク セット RT で指定された文字または正規表現に一致する入力テキスト RS.

RSTART

に一致する最初の文字のインデックス 一致();一致しない場合は0。 (これは、文字インデックスが1から始まることを意味します)。

RLENGTH

にマッチした文字列の長さ 一致();一致がなければ-1。

SUBSEP

配列要素の複数の添字を区切るために使用される文字。デフォルトでは ' 034'.

テキストのドメイン

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

配列

配列は、角括弧の間の式で添字付けられます( そして )。式が式リストの場合( expr , expr …)配列の添え字は、各式の(文字列)値の連結からなる文字列であり、各式の SUBSEP 変数。この機能は、複数の次元の配列をシミュレートするために使用されます。例えば:

i = "A"; j = "B"; k = "C"x i、j、k = "こんにちは、世界 n"

文字列を代入する "こんにちは、世界 n" 配列の要素へ バツ 文字列によってインデックスされる"A 034B 034C"。 AWKの全ての配列は連想的であり、すなわち文字列値によって索引付けされる。

特殊演算子 は、 if または while ある特定の値からなるインデックスが配列に含まれているかどうかを調べます。

if(配列の中のval)print array val

配列に複数の添字がある場合は、 (i、j)を配列.

構築物はまた、 にとって ループを実行して配列のすべての要素を反復処理します。

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

可変タイピングと変換

変数とフィールドは、(浮動小数点)数値、文字列、またはその両方になります。変数の値がどのように解釈されるかは、そのコンテキストに依存します。数値式で使用される場合は数値として扱われ、文字列として使用される場合は文字列として扱われます。

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

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

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

変数 b 文字列値が '12' そうではない '12.00'.

ゴーク 次のように比較を実行します。2つの変数が数値の場合は、数値が比較されます。一方の値が数値で他方が ``数値文字列 ''である文字列値を持つ場合、比較も数値的に行われます。それ以外の場合は、数値が文字列に変換され、文字列比較が実行されます。 2つの文字列は、もちろん、文字列として比較されます。 POSIX標準では、文字列定数に至るまで、どこでも "数値文字列"の概念が適用されることに注意してください。しかし、これは明らかに間違っています。 ゴーク これをしない。 (幸いにも、これは標準の次のバージョンで修正されています。)

文字列定数(例えば、 '57'、are are ない それらは文字列定数です。 ``数値文字列 ''の考え方はフィールドにのみ適用され、 getline 入力、 ファイル名, ARGV 要素、 ENVIRON 配列の要素と配列の要素 スプリット() それは数値文字列です。基本的な考え方は、 ユーザー入力 数値に見えるユーザー入力だけがそのように扱われるべきです。

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

8進定数と16進定数

バージョン3.1以降 gawk、 AWKプログラムのソースコードにCスタイルの8進定数と16進定数を使用することができます。たとえば、8進数の値 011 10進数に等しい 9、および16進値 0x11 小数点第17位に等しい。

文字列定数

AWKの文字列定数は、二重引用符で囲まれた文字列です(')。文字列内で、特定の エスケープシーケンス Cのように認識されます。これらは次のとおりです。

\

リテラルのバックスラッシュ。

a

``警告 ''文字。通常はASCII BEL文字です。

b

バックスペース。

f

フォームフィード。

n

改行。

r

キャリッジリターン。

t

水平タブ。

v

垂直タブ。

バツ 16進数

次の16進数の文字列で表される文字。 バツ。 ANSICの場合と同様に、16進数の数字はすべてエスケープシーケンスの一部とみなされます。 (この機能は、委員会による言語設計について何か教えてくれるはずです)。たとえば、 " x1B" ASCIIESC(エスケープ)文字です。

ddd

1桁、2桁、または3桁の8進数のシーケンスで表される文字。例えば。、 ' 033' ASCII ESC(エスケープ)文字です。

c

リテラル文字 c .

エスケープシーケンスは、定数正規表現(例えば、/ t f n r v / 空白文字と一致します)。

互換モードでは、8進および16進のエスケープシーケンスで表される文字は、正規表現定数で使用されると文字通り扱われます。このように、 / a 52b // a * b /.

パターンとアクション

AWKは行指向言語です。パターンが最初に来て、それから行動が起こります。アクションステートメントは { そして }。パターンが欠落しているか、またはアクションが欠落している可能性がありますが、もちろん両方ではありません。パターンが欠落している場合は、入力レコードごとにアクションが実行されます。行方不明の行為は

{印刷}

レコード全体を印刷します。

コメントは ``# ''文字で始まり、行末まで続きます。文を区切るために空白行を使用できます。通常、ステートメントは改行で終わりますが、これは ``、 ''で終わる行には当てはまりません。 {, ?, :, &&、または ||。で終わる行 行う または else また、次の行に自動的にそのステートメントが続きます。それ以外の場合は、行を継続することができます。これを 'で終えると、改行は無視されます。

複数のステートメントは、 `; ''で区切って1行に入れることができます。これは、パターン・アクション・ペアのアクション・パート内のステートメント(通常の場合)とパターン・アクション・ステートメント自体の両方に適用されます。

パターン

AWKパターンは、次のいずれかです。

ベギン 終わり / 正規表現 / 関係式 パターン && パターン パターン || パターン パターン ? パターン : パターン ( パターン ) ! パターン パターン1 , パターン2

ベギン そして 終わり 入力に対してテストされない2つの特別な種類のパターンです。すべての行動の部分 ベギン あたかもすべての文が単一の文で記述されているかのようにパターンがマージされます ベギン ブロック。それらは、入力のいずれかが読み取られる前に実行されます。同様に、 終わり ブロックがマージされ、すべての入力がなくなったとき(または 出口 ステートメントが実行されます)。 ベギン そして 終わり パターン式の他のパタ​​ーンと組み合わせることはできません。 ベギン そして 終わり パターンには欠けているアクション部分はありません。

にとって / 正規表現 / 正規表現に一致する入力レコードごとに関連するステートメントが実行されます。正規表現は egrep (1)、以下に要約する。

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

&&, ||、および ! 演算子はCのように論理AND、論理OR、論理NOTです。これらはCの場合と同様に短絡評価を行い、より基本的なパターン式を結合するために使用されます。ほとんどの言語と同様に、カッコを使用して評価の順序を変更することができます。

?: 演算子はCの同じ演算子と同じです。最初のパターンがtrueの場合、テストに使用されるパターンは2番目のパターンです。それ以外の場合は3番目のパターンです。第2および第3のパターンのうちの1つだけが評価される。

ザ パターン1 , パターン2 式の形式は、 範囲パターン 。これは、一致するレコードで始まるすべての入力レコードと一致します パターン1 、一致するレコードまで続行する パターン2 包括的である。他のパターン表現と組み合わせることはできません。

正規表現

正規表現は、 egrep 。それらは次のような文字で構成されています。

c

メタキャラクタ以外のものと一致する c .

c

リテラル文字と一致する c .

.

任意の文字に一致する を含む 改行。

^

文字列の先頭に一致します。

$

文字列の終わりに一致します。

abc …

文字リスト、いずれかの文字に一致する abc … .

^ abc …

ネゲートされた文字リストは、 abc … .

r1 | r2

交替:どちらかと一致する r1 または r2 .

r1r2

連結:マッチ r1 、 その後 r2 .

r +

1つ以上と一致する r 's。

r *

ゼロ個以上と一致する r 's。

r ?

ゼロまたは1にマッチする r 's。

( r )

グループ化:一致 r .

r { n }

r { n ,}

r { n , m } 中括弧内の1つまたは2つの数字は、 区間式 。カッコ内に1つの数字がある場合は、その前の正規表現 r 繰り返し n 回。コンマで区切られた2つの数字がある場合、 r 繰り返し n に m 回。 1つの数字の後にカンマが続く場合、 r 少なくとも繰り返される n 回。

インターバル式は、 --posix または --re-interval コマンドラインで指定します。

y

単語の先頭または末尾の空の文字列と一致します。

B

単語内の空の文字列に一致します。

<

単語の先頭にある空の文字列と一致します。

>

単語の最後にある空文字列と一致します。

w

単語構成文字(英字、数字、またはアンダースコア)に一致します。

W

単語構成要素ではない文字に一致します。

`

バッファ(文字列)の先頭にある空の文字列と一致します。

'

バッファの最後にある空の文字列と一致します。

文字列定数(下記参照)で有効なエスケープシーケンスは、正規表現でも有効です。

文字クラス POSIX標準で導入された新機能です。文字クラスは、特定の属性を持つ文字のリストを記述するための特別な表記法ですが、実際の文字自体は国によって異なります。また、文字セットから文字セットまでさまざまです。たとえば、アルファベット文字の概念は、米国とフランスでは異なります。

文字クラスは正規表現でのみ有効です 内部 文字リストの大括弧文字クラスは :、クラスを示すキーワード、および :。 POSIX標準で定義されている文字クラスは次のとおりです。

:alnum:

英数字。

:アルファ:

アルファベット文字。

:ブランク:

スペースまたはタブ文字。

:cntrl:

制御文字。

:桁:

数字。

:グラフ:

印刷可能で表示可能な文字。 (スペースは印刷可能ですが、表示されません。 a 両方。)

:lower:

小文字のアルファベット文字。

:print:

印刷可能な文字(制御文字ではない文字)

:punct:

句読文字(文字、数字、制御文字、またはスペース文字ではない文字)。

:スペース:

スペース文字(スペース、タブ、フォームフィードなど)。

:アッパー:

大文字のアルファベット文字。

:xdigit:

16進数の文字。

たとえば、POSIX標準の前に英数字を一致させるには、 / A-Za-z0-9 /。キャラクタセットに他のアルファベット文字が含まれていると、これは一致しません。キャラクタセットがASCIIと異なる場合は、ASCII英数字と一致しないこともあります。 POSIX文字クラスを使用すると、/ :alnum: /これはあなたのキャラクタセットのアルファベットと数字と一致します。

文字リストにはさらに2つの特別なシーケンスが表示されます。これらは非ASCII文字セットに適用され、単一のシンボルを持つことができます( 照合要素 )は、複数の文字で表現されているだけでなく、 照合 、またはソート、目的。 (たとえば、フランス語では、「e」と「grave-accented e」は同等です)。

照合記号

照合記号は、複数の文字の照合要素で囲まれています . そして .。たとえば、 ch 照合要素である場合、 .ch。 この照合要素に一致する正規表現ですが、 ch どちらかと一致する正規表現です c または h.

等価クラス

等価クラスは、同等の文字のリストのロケール固有の名前です。名前は = そして =。たとえば、名前 e "e"、 "e"、 "e"のすべてを表すために使われるかもしれない "この場合、 = = = いずれかと一致する正規表現です e, e '、または e.

これらの機能は、英語以外のロケールでは非常に役立ちます。ライブラリは、 ゴーク 正規表現マッチングのための使用は現在、POSIX文字クラスのみを認識します。照合シンボルや等価クラスは認識されません。

y, B, <, >, w, W, `、および ' オペレータは ゴーク ; GNU正規表現ライブラリの機能に基づいた拡張機能です。

さまざまなコマンドラインオプションは、 ゴーク 正規表現の文字を解釈します。

オプションはありません

デフォルトの場合、 ゴーク 上記のPOSIX正規表現とGNU正規表現演算子のすべての機能を提供します。ただし、間隔式はサポートされていません。

--posix

POSIX正規表現だけがサポートされていますが、GNU演算子は特別ではありません。 (例えば。、 w リテラルにマッチする w)。区間式は使用できます。

- 従来の

従来のUnix awk 正規表現がマッチします。 GNU演算子は特別なものではなく、区間式は利用できず、いずれもPOSIX文字クラスではありません(:alnum: 等々)。 8進および16進のエスケープシーケンスで記述された文字は、正規表現のメタキャラクタを表していても、文字通り扱われます。

--re-interval

正規表現で区間式を許可する - 従来の が提供されている。

行動

アクション文は中括弧で囲まれており、 { そして }。アクションステートメントは、ほとんどの言語で見られる通常の割り当て、条件付きステートメント、およびループステートメントから構成されます。使用可能な演算子、制御文、および入出力文は、C言語のものよりもパターン化されています。

演算子

AWKの演算子は、優先順位の低い順に、

()

グルーピング

$

フィールド参照。

++ --

接頭辞と接尾辞の両方のインクリメントとデクリメント。

^

累乗(** また使用することができ、 **= 代入演算子の場合)。

+ - !

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

* / %

乗算、除算、モジュラス

+ -

足し算と引き算。

スペース

文字列連結。

< >

<= >=

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

~ !~

正規表現一致、否定一致。 注意: 定数正規表現を使用しないでください(/ foo /)の左側にある ~ または !~。右側のものだけを使用してください。表現 / foo /〜 経験 同じ意味を持つ (($ 0〜/ foo /)〜 経験 )。これは通常です ない 何が意図されたか。

配列メンバーシップ。

&&

論理AND。

||

論理OR。

?:

Cの条件式。これはフォームを持っています expr1 ? expr2 : expr3 。もし expr1 が真であれば、式の値は expr2 そうでなければ expr3 。 1つだけの expr2 そして expr3 評価される。

= += -=

*= /= %= ^= 割り当て。両方の絶対割り当て ( var = ) オペレータ割り当て(他の形式)がサポートされています。

制御文

制御文は次のとおりです。

if( 調子 ) ステートメント else ステートメント while( 調子 ) ステートメント 行う ステートメント while( 調子 ) にとって ( expr1 ; expr2 ; expr3 ) ステートメント にとって ( var アレイ ) ステートメント ブレーク 持続する 削除 アレイ 索引 削除 アレイ 出口 表現 { ステートメント }

I / Oステートメント

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

閉じる( ファイル , どうやって )

ファイル、パイプまたは共プロセスを閉じます。オプション どうやって コプロセスへの双方向パイプの一端を閉じるときにのみ使用してください。文字列値である必要があります。 "に" または "から".

getline

セット $0 次の入力レコードから。セット NF, NR, FNR.

getline < ファイル

セット $0 次のレコードから ファイル ;セット NF.

getline var

セット var 次の入力レコードから。セット NR, FNR.

getline var < ファイル

セット var 次のレコードから ファイル .

コマンド | getline var

走る コマンド 出力を $0 または var 、 上記のように。

コマンド |&getline var

走る コマンド 共プロセスとして、出力を $0 または var 、 上記のように。共同プロセスは、 ゴーク 拡張。

現在の入力レコードの処理を停止します。次の入力レコードが読み込まれ、AWKプログラムの最初のパターンで処理が開始されます。入力データの終わりに達すると、 終わり ブロックがあれば、それが実行される。

次のファイル

現在の入力ファイルの処理を停止します。次の入力レコードは、次の入力ファイルから読み込まれます。 ファイル名 そして ARGIND 更新され、 FNR 1にリセットされ、AWKプログラムの最初のパターンで処理が開始されます。入力データの終わりに達すると、 終わり ブロックがあれば、それが実行される。

印刷する

現在のレコードを印刷します。出力レコードは、 ORS 変数。

印刷する expr-list

式を出力します。各式は、 OFS 変数。出力レコードは、 ORS 変数。

印刷する expr-list > ファイル

式を印刷する ファイル 。各式は、 OFS 変数。出力レコードは、 ORS 変数。

printf fmt、expr-list

フォーマットと印刷。

printf fmt、expr-list > ファイル

フォーマットと印刷 ファイル .

システム( cmd-line )

コマンドを実行する cmd-line 、終了ステータスを返します。 POSIX以外のシステムでは利用できないかもしれません。

fflush( ファイル )

開いている出力ファイルまたはパイプに関連付けられたバッファをフラッシュします。 ファイル 。もし ファイル がない場合、標準出力がフラッシュされます。もし ファイル がヌル文字列の場合、開いているすべての出力ファイルとパイプのバッファがフラッシュされます。

追加の出力リダイレクトは許可されています 印刷する そして printf.

印刷する… >> ファイル

出力を ファイル .

印刷する| コマンド

パイプに書き込む。

印刷する| |& コマンド

共プロセスにデータを送信します。

getline コマンドはファイルの最後に0を返し、エラーで-1を返します。エラーが発生すると、 ERRNO 問題を説明する文字列が含まれています。

注意: パイプまたは共プロセスを使用する場合 getline、またはから 印刷する または printf ループの中で、あなたは 必須 つかいます 閉じる() コマンドの新しいインスタンスを作成します。 AWKは、EOFを返すときに自動的にパイプやプロセスを閉じません。

printfステートメント

AWKのバージョンの printf ステートメントと sprintf() 関数(下記参照)は、以下の変換指定形式を受け入れます。

%c

ASCII文字。引数が %c は数字で、文字として扱われ、印刷されます。それ以外の場合、引数は文字列とみなされ、その文字列の最初の文字のみが出力されます。

%d, %私

10進数(整数部分)。

%e、%E

フォームの浮動小数点数 - d.dddddde + - dd。ザ %E フォーマット使用 E の代わりに e.

%f

フォームの浮動小数点数 - ddd.dddddd.

%g、%G

つかいます %e または %f 変換のうち、どちらか短い方が重要ではないゼロが抑制されます。ザ%G フォーマット使用 %E の代わりに %e.

%o

符号なし8進数(整数)。

%u 符号なし10進数(ここでも整数)。

%s

文字列。

%x、%X

符号なしの16進数(整数)。ザ %バツ フォーマット使用 ABCDEF の代わりにabcdef.

%%

独身者 % キャラクター;引数は変換されません。

オプションの追加パラメータは、 % と制御文字:

カウント $

使用 カウント これは書式設定のこの時点での引数です。これは、 位置指定子 主にAWKプログラムの元のテキストではなく、翻訳された形式の文字列での使用を意図しています。それは ゴーク 拡張。

-

式はそのフィールド内で左詰めにする必要があります。

スペース

数値の変換では、正の値にスペースを付け、負の値にマイナスの記号を付けます。

+

width修飾子(以下を参照)の前に使用されるプラス記号は、フォーマットされるデータが正であっても常に数値変換の記号を提供すると言います。ザ + スペース修飾子をオーバーライドします。

#

特定の制御文字には「代替フォーム」を使用してください。にとって %o先頭のゼロを供給します。にとって %バツ、および %バツ、先導する 0x または 0X 0以外の結果を返します。にとって %e, %E、および %f結果には常に小数点が含まれます。にとって %g、および %G末尾のゼロは結果から削除されません。

0

先導者 0 (ゼロ)はフラグとして機能し、出力にスペースの代わりに0を埋め込む必要があることを示します。これは、数値以外の出力形式にも適用されます。このフラグは、フィールドの幅が印刷される値よりも広い場合にのみ有効です。

フィールドはこの幅に埋め込まれている必要があります。フィールドは通常、スペースで埋められます。もし 0フラグが使用されている場合は、ゼロで埋められます。

. 事前

印刷時に使用する精度を指定する数値。のために %e, %E、および %fこれは、小数点の右側に印刷する桁数を指定します。のために %g、および %G 最大有効桁数を指定します。のために %d, %o, %私, %u, %バツ、および %バツ 書式では、印刷する最小桁数を指定します。にとって %s、それは印刷すべき文字列の最大文字数を指定します。

ダイナミック 幅 そして 事前 ANSI Cの機能 printf() ルーチンがサポートされています。 A * いずれかの または 事前 仕様によって、その値が引数リストから取得されます。 printf または sprintf()。位置指定子を動的な幅または精度で使用するには、 カウント $ 後に * 書式文字列で指定します。例えば、 "%3 $ * 2 $。* 1 $ s".

特別なファイル名

いずれかからI / Oリダイレクトを実行するとき 印刷する または