これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなど、複数の無料オンライン ワークステーションのいずれかを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド awkposix です。
プログラム:
NAME
awk — パターンスキャンおよび処理言語
SYNOPSIS
awk [−f セプストリング] [−v 割り当て]... プログラム [引数...]
awk [−f セプストリング] −f プログラムファイル [−f プログラムファイル]... [−v 割り当て]...
[引数...]
DESCRIPTION
当学校区の awk ユーティリティは、 awk プログラミング言語、つまり
テキストデータ操作に特化。 アン awk プログラムは一連のパターンであり、
対応するアクション。 パターンに一致する入力が読み取られると、関連付けられたアクション
そのパターンで実行されます。
入力は一連のレコードとして解釈されます。 デフォルトでは、レコードは行です。
その終了、しかし、これはを使用して変更できます RS 組み込み変数。 各
入力のレコードは、プログラム内の各パターンに対して順番に照合されます。 それぞれについて
パターンが一致した場合、関連付けられたアクションが実行されます。
当学校区の awk ユーティリティは、各入力レコードを一連のフィールドとして解釈します。
デフォルトでは、フィールドは非非文字。 このデフォルト
とフィールド区切り文字は、 FS 組み込み変数または −f
セプストリング オプション。 ザ· awk utility は、レコード $1 の最初のフィールドを示し、XNUMX 番目のフィールドを示します。
$2 など。 シンボル $0 はレコード全体を参照します。 他のフィールドを設定する
$0 の再評価を引き起こします。 $0 に割り当てると、他のすべてのフィールドの値がリセットされます
と NF 組み込み変数。
OPTIONS
当学校区の awk ユーティリティは、POSIX.1‐2008の基本定義ボリュームに準拠する必要があります。 セクション
12.2, ユーティリティ 構文 ガイドライン.
次のオプションがサポートされます。
−f セプストリング
入力フィールド区切りを定義します。 このオプションは以下と同等でなければなりません:
-v FS=セプストリング
ただし、 −f セプストリング −v FS=セプストリング 両方とも使用され、詳細不明
かどうか FS に起因する割り当て −f セプストリング コマンドで処理されます
ライン注文または最後の注文の後に処理されます −v FS=セプストリング。 説明を参照してください
FS 詳細説明の組み込み変数とその使用方法
のセクションから無料でダウンロードできます。
−f プログラムファイル
ファイルのパス名を指定します プログラムファイル を含む awk プログラム。 パス名
of '−' は標準入力を表します。 このオプションのインスタンスが複数ある場合
指定された、指定されたファイルの連結 プログラムファイル 順番に
指定されなければならない awk プログラム。 の awk プログラムは、代わりに
コマンド ラインで単一の引数として指定します。
−v 割り当て
アプリケーションは、 割り当て 引数は次と同じ形式です
an 割り当て オペランド。 指定された変数の割り当ては、
の実行 awk 関連するアクションを含むプログラム ベギン パターン
(もしあれば)。 このオプションは複数回指定できます。
オペランド
次のオペランドがサポートされます。
プログラム ない場合 −f オプションが指定されている場合、最初のオペランドは awk のテキストとする
awk プログラム。 アプリケーションは、 プログラム 単一のオペランド
への議論 awk. テキストが、 awk 解釈する
あたかもそうであるかのようにテキスト。
引数 以下のXNUMX種類のいずれか 引数 混合することができます:
file 読み取る入力を含むファイルのパス名。
プログラム内の一連のパターンと照合されます。 いいえ file
オペランドが指定されている場合、または file オペランドは '−'、標準
入力を使用するものとする。
割り当て
で始まるオペランドまたは英字
移植可能な文字セットから (基本定義の表を参照)
POSIX.1‐2008のボリューム、 セクション 6.1, ポータブル 人格 作成セッションプロセスで)、続いた
アンダースコア、数字、およびアルファベットのシーケンスによって
ポータブル文字セット、その後に '=' 文字を指定しなければならない
パス名ではなく変数の割り当て。 その前の文字は
'=' の名前を表す awk 変数; その名前が awk
予約語 (を参照) 文法) 動作は未定義です。 キャラクター
に続いてそれらが現れたかのように解釈されます
会場は awk プログラムの前後に二重引用符 ('"')
キャラクターとして、 STRING トークン (参照 文法)、ただし、最後の
文字はエスケープされていませんとして解釈されます。
リテラルシーケンスの最初の文字としてではなく
"\"". 変数にはその値が割り当てられます STRING トークン
適切な場合は、 数値の string (参照してください
式 in awk)、変数にもその数値が割り当てられます
価値。 そのような変数の割り当てはそれぞれ、
以下の処理 file、もしあれば。 したがって、以前の割り当て
最初の file 引数は、 ベギン アクション(場合
any)、最後の割り当ての後に file 引数が発生する
前 終わり アクション (ある場合)。 ない場合 file 引数、
割り当ては、標準入力を処理する前に実行されます。
標準入力
標準入力は、次の場合にのみ使用されます。 file オペランドが指定されている場合、または file
オペランドは '−'、または プログラムファイル オプション-引数は '−'; 入力ファイルのセクションを参照してください。 もしも
awk プログラムにはアクションもパターンも含まれていませんが、それ以外は有効です awk プログラム、
標準入力と任意 file オペランドは読み取られず、 awk return で終了します
ゼロの状態。
入力 ファイル
への入力ファイル awk 次のソースのいずれかからのプログラムは、テキスト ファイルである必要があります。
* どれでも file オペランドまたはそれに相当するもの。 awk variables ARGV
ARGC
*何もない場合の標準入力 file オペランド
* への引数 ゲットライン function
変数かどうか RS 以外の値に設定されているかどうか、これらのファイルについて、
実装は、指定されたセパレーターで終了するレコードをサポートするものとします。
{LINE_MAX} バイトで、より長いレコードをサポートする場合があります。
If −f プログラムファイル が指定されている場合、アプリケーションは、それぞれによって名前が付けられたファイルが
プログラムファイル オプション引数は、テキスト ファイルとその連結であり、次の順序と同じです。
それらは引数に現れます。 awk プログラム。
ENVIRONMENT 変数
次の環境変数は、の実行に影響を与えます。 awk:
言語 設定されていない、または設定されていない国際化変数のデフォルト値を指定します
ヌル。 (POSIX.1‐2008の基本定義ボリュームを参照してください。 セクション 8.2,
国際化 変数 国際化の優先順位について
ロケールカテゴリの値を決定するために使用される変数。)
LC_ALL 空でない文字列値に設定されている場合は、他のすべての値を上書きします
国際化変数。
LC_COLLATE
範囲、同値類、および複数の動作のロケールを決定します。
正規表現内および比較における文字照合要素
文字列値。
LC_CTYPE テキストデータのバイトシーケンスを解釈するためのロケールを決定します
文字として(たとえば、のマルチバイト文字ではなくシングルバイト
引数と入力ファイル)、通常の文字クラス内の動作
表現、文字としての文字の識別、およびマッピング
の大文字と小文字 トッパー 低い 機能します。
LC_MESSAGES
の形式と内容に影響を与えるために使用する必要があるロケールを決定します
標準エラーに書き込まれる診断メッセージ。
LC_NUMERIC
数値入力を解釈するときに使用される基数文字を決定し、
数値と文字列値の間の変換、および数値出力の書式設定。
ロケールに関係なく、 文字 (小数点文字
POSIX ロケール) は、処理で認識される小数点文字です。 awk
プログラム (コマンド ライン引数での割り当てを含む)。
NLSパス の処理のためのメッセージカタログの場所を決定します LC_MESSAGES.
パス によって実行されるコマンドを探すときの検索パスを決定する (式)、または
入力パイプと出力パイプ。 POSIX.1‐2008 の Base Definitions ボリュームを参照してください。 章
8, 環境 変数.
さらに、すべての環境変数は、 awk 変数 環境.
非同期 イベント
デフォルト。
標準出力
出力ファイルの性質は、 awk プログラム。
標準
標準エラーは、診断メッセージにのみ使用されます。
出力 ファイル
出力ファイルの性質は、 awk プログラム。
拡張済み DESCRIPTION
全体 (AFCプログラム) Structure
An awk プログラムは、次の形式のペアで構成されます。
パターン { アクション }
パターンまたはアクション (括弧文字を含む) のいずれかを指定できます。
省略。
欠落しているパターンは入力の任意のレコードと一致し、欠落しているアクションは
に相当:
{ 印刷 }
の実行 awk プログラムは、最初に関連付けられたアクションを実行することによって開始されます
を ベギン パターンは、プログラムで発生する順序で表示されます。 それではそれぞれ file オペランド (または
ファイルが指定されていない場合は標準入力) からデータを読み取ることによって順番に処理されます。
レコードセパレーターが表示されるまでファイル ( デフォルトで)。 最初の前に
レコード内のフィールドへの参照が評価されると、レコードはフィールドに分割されます。
のルールに従って レギュラー 式の値を使用して、 FS それは当時の
レコードが読み取られた時間。 次に、プログラム内の各パターンは、
発生順序、および現在のパターンに一致する各パターンに関連付けられたアクション
レコードが実行されました。 一致するパターンのアクションは、評価の前に実行されます
その後のパターン。 最後に、すべてに関連付けられているアクション 終わり パターンは
プログラムで発生した順序で実行されます。
式 in awk
式は、で使用される計算を記述します パターン 行動. 次の表では、
有効な式演算は、優先順位の高いものから順にグループで指定されます
優先度が最後で、水平線の間に等優先度演算子がグループ化されています。 の
式の評価。文法が正式にはあいまいで、優先度が高い
演算子は、優先順位の低い演算子の前に評価されます。 この表では 式, 式1,
式2, 式3 任意の式を表し、lvalue は任意のエンティティを表します。
代入先 (つまり、代入演算子の左側)。 の正確な構文
式は 文法.
表 4-1: 式 in 減少 優先順位 in awk
┌──────────────────────┬──────────────────────────┬── ────────────────┬──────────────┐
│ 構文 │ お名前 │ タイプ of 結果 │連想性 │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│( 式 ) │グルーピング │種類 式 │なし │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│$式 │フィールド参照 │文字列 │N/A │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│lvalue ++ │ポストインクリメント │数値 │N/A │
│lvalue −− │ポスト デクリメント │数値 │N/A │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│++ 左辺値 │プレインクリメント │数値 │N/A │
│−− 左辺値 │プリデクリメント │数値 │N/A │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│式 ^ 式 │べき乗 │数値 │右 │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│! 式 │論理否定 │数値 │N/A │
│+ 式 │単項プラス │数値 │N/A │
│− 式 │単項マイナス │数値 │N/A │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│式 * 式 │乗算 │数値 │左 │
│式 / 式 │除算 │数値 │左 │
│式 % 式 │モジュラス │数値 │左 │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│式 + 式 │加算 │数値 │左 │
│式 - 式 │減算 │数値 │左 │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│式 式 │文字列連結 │文字列 │左 │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│式 < 式 │未満 │数値 │なし │
│式 <= 式 │以下 │数値 │なし │
│式 != 式 │等しくない │数値 │なし │
│式 == 式 │等しい │数値 │なし │
│式 > 式 │より大きい │数値 │なし │
│式 >= 式 │以上 │数値 │なし │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│式 ~ 式 │ERE 一致 │数値 │なし │
│式 !~ 式 │ERE 不一致 │数値 │なし │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│式 配列内 │配列メンバーシップ │数値 │左 │
│( index )in 配列 │多次元配列 │数値 │左 │
│ │メンバーシップ │ │ │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│式 && 式 │論理積 │数値 │左 │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│式 || 式 │論理和 │数値 │左 │
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│式1 ? 式2 : 式3│条件式│選択の種類│右│
│││式2 or 式3 ││
├──────────────────────┼────────────────────────┼─ ────────────────┼──────────────┤
│左辺値 ^= 式 │累乗代入│数値│右│
│左辺値 %= 式 │モジュラス代入 │数値 │右 │
│左辺値 *= 式 │乗算代入│数値│右│
│左辺値/= 式 │除算 │数値 │右 │
│左辺値 += 式 │加算代入 │数値 │右 │
│左辺値 −= 式 │減算代入 │数値 │右 │
│左辺値 = 式 │課題 │種類 式 │右│
└──────────────────────┴────────────────────────┴─ ────────────────┴──────────────┘
各式には、文字列値、数値、またはその両方が含まれます。 を除いて
特定のコンテキストについて述べられている場合、式の値は暗黙的に次のように変換されます。
それが使用されるコンテキストに必要なタイプ。 文字列値は次のように変換されます
によって定義された関数への次の呼び出しと同等のいずれかによる数値
ISO C 標準:
setlocale(LC_NUMERIC, "");
数値値 = atof(文字列値);
または文字列の最初の部分を型に変換することによって としての表現
以下:
入力文字列は XNUMX つの部分に分解されます: 最初の、場合によっては空のシーケンス
空白文字の イススペース()) とサブジェクト シーケンス
浮動小数点定数として解釈されます。
サブジェクト シーケンスの期待される形式はオプションです。 「+」 or '−' サイン、次に
オプションで、次にオプション
指数部。 指数部は 「e」 or 「E」、その後にオプションの
記号の後に XNUMX つ以上の XNUMX 進数が続きます。
最初の数字または(最初に発生した方)
は C 言語の浮動定数として解釈され、指数でもない場合は
一部でもありませんが表示されます。 の最後の桁に続くと見なされます
ストリング。 サブジェクト シーケンスがマイナス記号で始まる場合、値は
変換は無効になります。
整数の値と正確に等しい数値 (を参照) セクション 1.1.2,
コンセプト 派生 from ISO C スタンダード) は、同等のものによって文字列に変換されます。
への呼び出しの スプリント 関数 (参照してください String 機能) 文字列で "%NS" として FMT
引数と最初で唯一の変換される数値 式 口論。 どれでも
他の数値は、
スプリント 変数の値を持つ関数 CONVFMT として FMT 引数と
最初で唯一の数値として変換される 式 口論。 の結果
の値が CONVFMT 浮動小数点形式ではありません
仕様。 このボリュームの POSIX.1-2008 では、明示的な変換を指定していません。
数字と文字列。 アプリケーションは、式を強制的に数値として処理することができます。
ゼロを追加するか、null を連結して強制的に文字列として処理することができます
ストリング ("")それに。
文字列値は 数値の string 次のいずれかに由来する場合:
1. フィールド変数
2. からの入力 ゲットライン() 関数
3. ファイル名
4. ARGV 配列要素
5. 環境 配列要素
6. によって作成された配列要素 split() 関数
7. コマンドライン変数の割り当て
8. 別の数値文字列変数からの変数代入
以下のケース (a) または (b) のいずれかに対応する実装依存の条件は、
会った。
を。 ISO C で定義された関数への次の呼び出しに相当する後
標準、 string_value_end とは異なります 文字列値、およびその前の任意の文字
の終端ヌル文字 string_value_end だろう文字:
チャリオット *文字列値の終わり;
setlocale(LC_NUMERIC, "");
数値値 = ストロッド (文字列値、 &string_value_end);
b. 次のすべての変換が適用された後、結果の文字列は次のようになります。
として語彙的に認識される 数 の語彙規則で記述されているトークン
文法:
-- すべての先頭と末尾文字は破棄されます。
-- 最初の非- は 「+」 or '−'、破棄されます。
-- 現在のロケールの小数点文字が出現するたびに変更されます
に.
(a) の数値 数値の string なる値でなければならない
によって返された ストロッド() 電話。 ケース (b) の場合、最初の非は '−'、数値
の値 数値の string 認識されたの数値の否定でなければならない
数 トークン; それ以外の場合は、 数値の string 数値でなければならない
認識された価値 数 トークン。 文字列が 数値の string しなければならない
このセクションでその用語が使用されている文脈でのみ関連します。
式がブール コンテキストで使用されている場合、数値が含まれる場合、
ゼロは false として扱われ、その他の値は true として扱われます。 そうでなければ、
null 文字列の文字列値は false として扱われ、その他の値は false として扱われます。
真として扱われます。 ブール コンテキストは、次のいずれかになります。
* 条件式の最初の部分式
* 論理 NOT、論理 AND、または論理 OR によって演算される式
* a の XNUMX 番目の式 の ステートメント
*の表現 if ステートメント
※の表現は while いずれかの句 while or do...while ステートメント
* パターンとして使用される式 (プログラム全体の構造のように)
すべての演算は、浮動小数点演算のセマンティクスに従う必要があります。
ISO C 規格 (参照 セクション 1.1.2, コンセプト 派生 from ISO C スタンダード).
式の値:
式1 ^ 式2
ISO C 標準関数呼び出しによって返される値と同等でなければなりません。
捕虜(式1, 式2)
表現:
左辺値 ^= 式
ISO C標準式と同等でなければなりません:
左辺値 = pow(左辺値, 式)
ただし、lvalue は XNUMX 回だけ評価されます。 式の値:
式1 % 式2
ISO C 標準関数呼び出しによって返される値と同等でなければなりません。
fmod(式1, 式2)
表現:
左辺値 %= 式
ISO C標準式と同等でなければなりません:
左辺値 = fmod(左辺値、 式)
ただし、lvalue は XNUMX 回だけ評価されます。
変数とフィールドは、割り当てステートメントによって設定されます。
左辺値 = 表現
とのタイプ 表現 結果の変数の型を決定します。 割り当て
算術代入 ("+=", 「−=」, "*=", "/=", "%=", "^=", 「++」, 「-」) 全て
そのうちの数値結果を生成します。 代入の左辺と
インクリメントおよびデクリメント演算子のターゲットは、変数、インデックス付き配列、
またはフィールドセレクター。
当学校区の awk 言語は、数値または文字列を格納するために使用される配列を提供します。 配列
宣言する必要はありません。 それらは最初は空であり、サイズは変化します
動的に。 添字または要素識別子は文字列であり、次のタイプを提供します。
連想配列機能。 角括弧内の添え字が続く配列名
文法で説明されているように、左辺値として、したがって式として使用できます。 見る
文法. 添字なしの配列名は、次のコンテキストでのみ使用できます。
* 関数定義または関数呼び出しのパラメーター
* NAME キーワードの使用に続くトークン in 文法で指定されているとおり (を参照)
文法); このコンテキストで使用される名前が配列名でない場合、動作は次のようになります。
未定義
有効な配列 index XNUMXつ以上からなる-区切り式、類似
一部のプログラミング言語で多次元配列にインデックスを付ける方法。
なぜなら awk 配列は実際には XNUMX 次元です。 -区切られたリストは
個別の文字列値を連結することにより、単一の文字列に変換されます
の値で区切られた式。 サブセップ 変数。 したがって、
次の XNUMX つのインデックス操作は同等です。
VAR[式1, 式2、 ... 式]
VAR[式1 サブセップ 式2 サブセップ ... サブセップ 式]
アプリケーションは、多次元の index で使用される in オペレーターは
括弧付き。 の in 特定の配列の存在をテストする演算子
その要素を存在させてはならない。 存在しない配列へのその他の参照
要素はそれを自動的に作成します。
比較 ( '<', 「<=」, 「!=」, 「==」, '>', ">= 演算子) を作成する必要があります。
両方のオペランドが数値の場合は数値、一方が数値で他方が文字列の場合
数値文字列の値、または一方が数値で他方が初期化されていない場合
価値。 それ以外の場合、オペランドは必要に応じて文字列に変換され、文字列
比較は、ロケール固有の照合シーケンスを使用して行われます。 の値
比較式は、関係が真の場合は 1、関係が偽の場合は 0 になります。
変数 Special 変数
変数は awk それらを参照してプログラムします。 を除いて
関数パラメータ (参照 ユーザー定義の 機能)、明示的に宣言されていません。
関数のパラメータ名は関数に対してローカルでなければなりません。 他のすべての変数名は
グローバル。 関数のパラメータ名と名前の両方に同じ名前を使用してはならない
関数または特殊の awk 変数。 同じ名前を両方として使用してはならない
グローバルスコープの変数名および関数の名前として。 同名は不可
スカラー変数と配列の両方として同じスコープ内で使用されます。 初期化されていない
スカラー変数、配列要素、およびフィールド変数を含む変数は、
初期化されていない値。 初期化されていない値は、ゼロの数値と
空文字列の文字列値。 初期化されていない値を持つ変数の評価。
文字列または数値のいずれかであり、それらが使用されるコンテキストによって決定されます。
フィールド変数は、 '$' 数値または数式が続きます。
フィールド番号の影響 表現 非負以外の評価
整数は指定されていません。 初期化されていない変数または文字列値を変換する必要はありません
このコンテキストの数値。 新しいフィールド変数は、値を代入することで作成できます
彼ら。 存在しないフィールド (つまり、$ の後のフィールド) への参照NF)、次のように評価されます。
初期化されていない値。 そのような参照は、新しいフィールドを作成してはなりません。 ただし、
存在しないフィールド (たとえば、$(NF+2)=5) の値を増加させるものとします NF; 作成する
初期化されていない値を持つ介在フィールド。 $0 の値を
の値で区切られたフィールドで再計算されます。 FSO. 各フィールド変数
作成時に文字列値または初期化されていない値を持つ必要があります。 フィールド変数は
を使用して $0 から作成された場合、初期化されていない値を持ちます FS 変数はそうではありません
任意の文字が含まれています。 適切な場合、フィールド変数は数値と見なされます
文字列 (参照 式 in awk).
実装は、によって設定される次の他の特殊変数をサポートする必要があります。 awk:
ARGC の要素数 ARGV アレイ。
ARGV オプションと プログラム 引数、
ゼロから数えた ARGC-1。
の引数 ARGV 変更または追加できます。 ARGC 変更できます。 それぞれのように
入力ファイルが終了し、 awk の次の非 null 要素を処理します。 ARGV、 以下
現在の値 ARGC次の入力ファイルの名前として -1 (両端を含む)。 したがって、
の要素を設定する ARGV null は、
入力ファイル。 名前 '−' 標準入力を示します。 引数が一致する場合
のフォーマット 割り当て オペランド、この引数は
割り当て いうより file 引数。
CONVFMT 当学校区の printf 数値を文字列に変換するための形式 (出力を除く)
ステートメント、ここで OFMT 使用されている); 「%.6g」 デフォルトでは
環境 で説明されているように、環境の値を表す配列 exec
POSIX.1-2008 の System Interfaces ボリュームで定義されている関数。 インデックス
の配列は、環境の名前で構成される文字列でなければなりません
変数であり、各配列要素の値は、
その変数の値。 適切な場合、環境変数は
考えられた 数値の string (参照してください 式 in awk); 配列要素は
もその数値を持っています。
すべての場合において、 awk 環境変数の影響を受ける
(すべてのコマンドの環境を含む awk を介して実行されます
関数またはパイプラインリダイレクトを介して 印刷 ステートメント、 printf
ステートメント、または ゲットライン 関数)、使用される環境は、
当時の環境 awk 実行を開始しました。 それは実装定義です
の変更の有無 環境 この環境に影響を与えます。
ファイル名 現在の入力ファイルのパス名。 内部 ベギン アクション値は
未定義。 内部 終わり action 値は最後の入力の名前でなければなりません
ファイルが処理されました。
FNR 現在のファイル内の現在のレコードの序数。 内部 ベギン
アクション値はゼロでなければなりません。 内部 終わり アクション値は
最後に処理されたファイルで最後に処理されたレコードの番号。
FS 入力フィールド区切りの正規表現。 a デフォルトで。
NF 現在のレコードのフィールド数。 内部 ベギン アクション、使用 NF
が定義されていない限り、 ゲットライン なしの関数 VAR 引数が実行されます
以前。 内部 終わり アクション、 NF 最後に持っていた値を保持します
後続のリダイレクトされない限り、レコードの読み取り、 ゲットライン なしの関数 VAR
引数は、に入る前に実行されます 終わり をご利用ください。
NR 入力の開始からの現在のレコードの序数。 内部
ベギン アクション値はゼロでなければなりません。 内部 終わり アクション値は
最後に処理されたレコードの番号。
OFMT 当学校区の printf 出力ステートメントで数値を文字列に変換するための形式 (を参照)
出力 ステートメント); 「%.6g」 デフォルトで。 変換結果は
の値の場合は未指定 OFMT は浮動小数点形式の仕様ではありません。
FSO 当学校区の 印刷 ステートメント出力フィールドセパレーター; デフォルトで。
ORS 当学校区の 印刷 ステートメント出力のレコード セパレータ。 a デフォルトで。
長さ によって一致する文字列の長さ match 機能。
RS の文字列値の最初の文字 RS 入力レコードとする
セパレーター; a デフォルトで。 もしも RS 複数の文字を含む、
結果は特定されていません。 もしも RS null の場合、レコードはシーケンスで区切られます
からなる先頭または末尾に XNUMX つまたは複数の空白行を追加
空白行は、先頭または末尾で空のレコードになってはならない
入力、および常にフィールド区切り文字でなければなりません。
の値 FS です。
再スタート によって一致する文字列の開始位置 match 関数、番号付け
1 から。これは常に、 match
機能。
サブセップ 多次元配列の添え字区切り文字列。 デフォルト値
実装定義です。
レギュラー 式
当学校区の awk ユーティリティは、拡張された正規表現表記法を使用する必要があります (Base を参照してください)。
POSIX.1‐2008の定義ボリューム、 セクション 9.4, 延長された レギュラー 式) それ以外で
特殊文字をエスケープするための C 言語規則の使用を許可するものとします。
POSIX.1-2008 の基本定義巻の表で指定されている ERE
章 5, File フォーマット 表記法 ('\\', '\NS', '\NS', '\NS', '\ n', '\NS', '\t', '\ v')と
次の表; これらのエスケープ シーケンスは、内部と外部の両方で認識されます。
ブラケット式。 レコードを区切る必要がないことに注意してください。 文字と
文字列定数には次を含めることができます文字なので、 "\ n" シーケンスは有効です
awk ERE。 を使ってERE 内の文字には、
次の表。
表 4-2: エスケープ シーケンス in awk
┌──────────┬────────────────────────────────────┬── ──────────────────────────────────┐
│ エスケープ │││
│シーケンス │ 詳細説明 │ 意味 │
├──────────┼────────────────────────────────────┼── ────────────────────────────────────┤
│\" │ │ キャラクター│
├──────────┼────────────────────────────────────┼── ────────────────────────────────────┤
│\/ │ │ キャラクター│
├──────────┼────────────────────────────────────┼── ────────────────────────────────────┤
│\ddd │ あ続く文字 │ エンコーディングが │ である文字
│ │ XNUMX の最長シーケンス、 │ XNUMX、XNUMX、または │ で表される
│ │ XNUMX 桁または XNUMX 桁の XNUMX 進整数 │ XNUMX 桁の XNUMX 進整数。 マルチ│
│ │ 文字 (01234567)。 すべての │ バイト文字が複数必要な場合、 │
│ │ 数字は 0 です (つまり、 │ 連結されたエスケープ シーケンス │
│ │ NUL の表現 │ 先頭を含むこのタイプ │
│ │ キャラクター)、動作は │ バイトごとに。 │
│ │ 未定義。 │ │
├──────────┼────────────────────────────────────┼── ────────────────────────────────────┤
│\c │ あ続く文字 │ 未定義 │
│ │ に記載されていない文字による │ │
│ │ この表または中の表 │ │
│ │ 基本定義ボリューム │ │
│ │ POSIX.1-2008、 章 5, File ││
││ フォーマット 表記法 ('\\', '\NS', '\NS'、 │ │
││ '\NS', '\ n', '\NS', '\t', '\ v')。 │ │
└──────────┴────────────────────────────────────┴── ──────────────────────────────────┘
次のいずれかを使用して、正規表現を特定のフィールドまたは文字列と照合できます。
XNUMX つの正規表現マッチング演算子 '〜' 「!~」. これらの演算子は解釈するものとします
正規表現としての右側のオペランドと文字列としての左側のオペランド。
正規表現が文字列に一致する場合、 '〜' 式は値に評価されます
1年の、そして 「!~」 式は 0 の値に評価されます。 (正規表現
マッチング操作は、のベース定義ボリュームで一致する用語で定義されているとおりです。
POSIX.1‐2008、 セクション 9.1, レギュラー 表現 定義、一致が発生する場所
正規表現が制限されていない限り、文字列の一部また
特殊文字。) 正規表現が文字列と一致しない場合、
'〜' 式は 0 の値に評価され、 「!~」 式は評価する
1 の値に。右側のオペランドが語彙トークン以外の式である場合
ERE、式の文字列値は拡張された正規表現として解釈されます
上記のエスケープ規則を含む式。 これらの同じエスケープに注意してください
文字列リテラルの値を決定する際にも規則が適用されます (
レキシカルトークン STRING)、したがって、文字列リテラルが
このコンテキストで使用されます。
とき ERE token は、右辺以外のあらゆるコンテキストで式として表示されます。
'〜' or 「!~」 演算子、または以下で説明する組み込み関数の引数の XNUMX つとして、
結果の式の値は、次のものと同等でなければなりません。
$0 " " /特長/
当学校区の 特長 への議論 gサブ, match , 以下 関数、および fs への議論 split
関数 (参照してください String 機能) は拡張正規表現として解釈されます。
これらは次のいずれかです。 ERE トークンまたは任意の式であり、
の右側と同じ方法で '〜' or 「!~」 オペレータ。
拡張正規表現を使用して、文字列を割り当てることでフィールドを区切ることができます
組み込み変数への式を含む FS、直接または結果として
使用の −f セプストリング オプション。 のデフォルト値 FS 変数は単一でなければなりません
. 以下に説明します FS 動作:
1。 もし FS null 文字列の場合、動作は規定されていません。
2。 もし FS は単一の文字です:
NS。 もしも FS は、先頭と末尾をスキップと文字;
フィールドは、XNUMX つまたは複数のセットで区切られます。 また文字。
b. そうでなければ、もし FS 他のキャラクターです c、フィールドはそれぞれで区切られます
の単一出現 c.
3. それ以外の場合、文字列値 FS 延長レギュラーとみなされる
表現。 拡張正規表現に一致するシーケンスの各出現
フィールドを区切らなければなりません。
を除いて '〜' 「!~」 演算子、および gサブ, match , split, 以下 内蔵
関数、ERE マッチングは入力レコードに基づくものとします。 つまり、レコード区切り
文字 (変数の値の最初の文字 RS、 デフォルトで)
を式に埋め込むことはできません。式はレコード セパレータと一致しません。
キャラクター。 レコードセパレーターがない場合、 に埋め込まれた文字
表現を合わせることができます。 のために '〜' 「!~」 演算子、およびこれらの XNUMX つの組み込み
関数、ERE マッチングはテキスト文字列に基づくものとします。 つまり、任意の文字 (を含む
およびレコード区切り文字) をパターンに埋め込むことができ、適切な
pattern は任意の文字に一致します。 ただし、全体として awk ERE マッチング、XNUMX つまたは XNUMX つの使用
パターン、入力レコード、またはテキスト文字列に NUL 文字が増えると、undefined が生成されます
結果。
パターン
A パターン どれも有効です 表現、a で区切られた XNUMX つの式で指定された範囲
カンマ、または XNUMX つの特殊なパターンのいずれか ベギン or 終わり.
Special パターン
当学校区の awk ユーティリティは、XNUMX つの特別なパターンを認識します。 ベギン 終わり。 各 ベギン パターン
一度一致し、それに関連するアクションが入力の最初のレコードの前に実行されます
が読み取られます。ただし、場合によっては、 ゲットライン 関数 (参照してください 入力/出力 全般
機能) 事前に ベギン アクション - コマンドラインの割り当てが完了する前。 各 終わり
パターンは XNUMX 回一致し、関連するアクションは最後のレコードの後に実行されます。
入力が読み取られました。 これら XNUMX つのパターンには、関連付けられたアクションがあります。
ベギン 終わり 他のパターンと組み合わせないでください。 多数 ベギン 終わり パターンは
許可されている。 に関連付けられているアクション ベギン パターンは順番に実行されます
プログラムで指定されているように、 終わり 行動。 アン 終わり パターンは ベギン
プログラムのパターン。
もし awk プログラムは、パターンを持つアクションのみで構成されています ベギン、 そしてその ベギン アクション
含まない ゲットライン 機能、 awk 最後に入力を読み取らずに終了します
最後の発言 ベギン アクションが実行されます。 もし awk プログラムはアクションのみで構成されています
パターン付き 終わり またはパターンを持つアクションのみ ベギン 終わり、入力は
のステートメントの前に読む 終わり アクションが実行されます。
表現 パターン
式パターンは、ブール コンテキストの式であるかのように評価されます。
結果が真の場合、パターンは一致すると見なされ、関連するアクション
(存在する場合) が実行されます。 結果が false の場合、アクションは実行されません。
パターン 範囲
パターン範囲は、コンマで区切られた XNUMX つの式で構成されます。 この場合、アクション
最初の式の一致と
XNUMX 番目の式の次の一致。 この時点で、パターン範囲は
一致した範囲の終わりに続く入力レコードから開始して繰り返されます。
アクションは、 の文法で示されている一連のステートメントです。 文法. 任意の単一
statement は、中かっこで囲まれたステートメント リストに置き換えることができます。 アプリケーション
ステートメントリスト内のステートメントがまた
文字。 ステートメントリスト内のステートメントは、順番に順番に実行されます
それらが現れること。
当学校区の 表現 で条件として機能する if ステートメントは評価されなければならず、
が非ゼロまたは非 null の場合、次のステートメントが実行されます。 そうでなければ、もし ほかに is
現在、次のステートメント ほかに 実行されます。
当学校区の if, while, do...while, の, 破る, 続ける ステートメントは ISO C に基づいています
標準 (参照 セクション 1.1.2, コンセプト 派生 from ISO C スタンダード)、ただし、
ブール式は、 式 in awk、およびを除く
の場合:
の (変数 in 配列)
これは反復し、それぞれを割り当てます index of 配列 〜へ 変数 不特定の順序で。
に新しい要素を追加した結果 配列 そのような中で の ループは定義されていません。 もし
破る or 続ける ステートメントがループの外側で発生した場合、動作は未定義です。
当学校区の 削除 ステートメントは、個々の配列要素を削除します。 したがって、次のコード
配列全体を削除します。
の (索引 in アレイ)
削除 配列[インデックス]
当学校区の 次の このステートメントにより、現在の入力レコードの以降のすべての処理が行われます。
放棄された。 の場合、動作は未定義です。 次の ステートメントが表示されるか、呼び出されます ベギン
or 終わり をご利用ください。
当学校区の 終了する ステートメントはすべてを呼び出します 終わり で発生する順序でのアクション
ソースをプログラムし、それ以上入力を読み取らずにプログラムを終了します。 アン 終了する
内部のステートメント 終わり アクションは、それ以上実行せずにプログラムを終了します
終わり 行動。 式が 終了する ステートメント、その数値は
の終了ステータスになる awk、後続のエラーが発生したり、後続のエラーが発生したりしない限り 終了する
式を含むステートメントが実行されます。
出力 ステートメント
両方 印刷 printf ステートメントは、デフォルトで標準出力に書き込みます。 出力
によって指定された場所に書き込まれます。 出力リダイレクト 提供されている場合は、次のように
以下:
> 表現
>> 表現
| 表現
すべての場合において、 表現 として使用される文字列を生成するために評価されます。
書き込むパス名 ( '>' or 「>>」)または実行するコマンドとして( '|').
最初の XNUMX つの形式を使用して、その名前のファイルが現在開いていない場合は、
開いて、必要に応じて作成し、最初の形式を使用して、ファイルを切り捨てます。 出力
その後、ファイルに追加されます。 ファイルが開いている限り、後続の呼び出し
which 表現 同じ文字列値に評価され、単純に出力を
ファイル。 ファイルは、 閉じる 関数 (参照してください 入力/出力 全般
機能) は、同じ文字列値に評価される式で呼び出されます。
XNUMX 番目の形式は、コマンドの入力にパイプされたストリームに出力を書き込みます。 の
の値を持つストリームが現在開いていない場合、ストリームが作成されます。 表現 そのよう
コマンド名。 作成されるストリームは、
ポペン() 関数は、POSIX.1-2008 の System Interfaces ボリュームで定義されており、値は
表現 として command 引数と値 w として モード 口論。 限り
ストリームは開いたままで、後続の呼び出しで 表現 同じ文字列に評価されます
value は既存のストリームに出力を書き込みます。 ストリームは、
閉じる 関数 (参照してください 入力/出力 全般 機能) は、次の式で呼び出されます。
同じ文字列値に評価されます。 その時点で、ストリームは
に電話する 閉じる() 関数は、POSIX.1-2008 のシステム インターフェイス ボリュームで定義されています。
の文法で詳しく説明されているように 文法、これらの出力ステートメントは
-区切られたリスト 表現s は非終端記号によって文法で参照されます
を示すマークを追加しました expr_list, print_expr_listまたは print_expr_list_opt. このリストはここで参照されています
として 表現 リスト、および各メンバーはと呼ばれます 表現 引数.
当学校区の 印刷 ステートメントは、各式引数の値を指定された
現在の出力フィールドセパレーターで区切られた出力ストリーム (変数を参照) FSO その上)、
出力レコード区切り記号で終了します (変数を参照してください)。 ORS その上)。 すべての表現
引数は、必要に応じて変換される文字列として取得されます。 この変換は
に記載されているとおりであること 式 in awk、例外として、 printf でフォーマット OFMT
の値の代わりに使用するものとします。 CONVFMT. 空の式リストは、
入力レコード全体 ($0)。
当学校区の printf ステートメントは、ファイル形式と同様の表記法に基づいて出力を生成する必要があります
このボリュームの POSIX.1‐2008 でファイル形式を記述するために使用される表記法 (Base
POSIX.1‐2008の定義ボリューム、 章 5, File フォーマット 表記法)。 出力は
最初に指定されたとおりに作成された 表現 文字列としての引数 形式でアーカイブしたプロジェクトを保存します.
それに続きます 表現 文字列としての引数 arg1 〜へ 引数、以下を含む
例外:
1。 ザ 形式でアーカイブしたプロジェクトを保存します. グラフィック表現ではなく、実際の文字列でなければなりません。
したがって、空の文字位置を含めることはできません。 のの中に 形式でアーカイブしたプロジェクトを保存します.
文字列、a 以外のコンテキストで フラグ 変換仕様の、
出力にコピーされる通常の文字として扱われます。
2. 文字セットに '' 文字であり、その文字が 形式でアーカイブしたプロジェクトを保存します.
文字列の場合、出力にコピーされる通常の文字として扱われます。
3。 ザ 脱出 シーケンス で始まるとして扱われます。
出力にコピーされる通常の文字のシーケンス。 これらは同じであることに注意してください
シーケンスは、によって語彙的に解釈されます。 awk それらがリテラル文字列に現れるとき、
しかし、彼らは特別に扱われてはならない printf 声明。
4。 A フィールド 幅 or 精度 として指定できます。 「*」 数字の代わりの文字
ストリング。 この場合、式リストから次の引数が取得され、
その数値がフィールド幅または精度として使用されます。
5. 実装は、 d or u 変換
指定子文字によって指定されていない文字 形式でアーカイブしたプロジェクトを保存します. 文字列。
6. 実装は、からの出力に先行してはならない o 変換指定文字
によって指定されていない先行ゼロ 形式でアーカイブしたプロジェクトを保存します. 文字列。
7。 のために c 変換指定子文字: 引数が数値の場合、
エンコーディングがその値である文字が出力されます。 値がゼロまたはそうでない場合
文字セット内の任意の文字のエンコード、動作は未定義です。 もし
引数に数値がない場合、文字列値の最初の文字は
出力されます。 文字列に文字が含まれていない場合、動作は未定義です。
8. 引数を消費する変換指定ごとに、次の式
引数が評価されます。 を除いて、 c 変換指定子
文字、値は変換されます (で指定された規則に従って)
式 in awk) を変換仕様の適切な型に変換します。
9. すべての変換を満たすには式の引数が不十分な場合
の仕様 形式でアーカイブしたプロジェクトを保存します. 文字列、動作は未定義です。
10. 形式でアーカイブしたプロジェクトを保存します. で始まる文字列 '%' キャラクターですが、そうです
有効な変換仕様を形成しない場合、動作は規定されていません。
両方 印刷 printf 少なくとも {LINE_MAX} バイトを出力できます。
機能
当学校区の awk 言語にはさまざまな組み込み関数があります: 算術、文字列、入力/出力、
そして一般。
算術 機能
を除く算術関数 int型、ISO C標準に基づくものとします(参照
セクション 1.1.2, コンセプト 派生 from ISO C スタンダード)。 動作は未定義です
ISO C 規格で、エラーを返す、または動作を変更することが指定されている場合
未定義。 ただし、文法 (を参照) 文法) 組み込み関数を指定せずに表示することを許可します
引数または括弧がオプションとして示されている場合を除き、引数または括弧
次のリスト( 「[]」 かっこ)、そのような使用は定義されていません。
あたん2(y,x)
逆正接を返す y/x [−π,π] の範囲のラジアン。
COS(x) の余弦を返す xここで、 x 単位はラジアンです。
罪(x) の正弦を返す xここで、 x 単位はラジアンです。
EXP(x) の指数関数を返します x.
ログ(x) の自然対数を返します x.
平方根(x) の平方根を返します x.
int型(x) 整数に切り捨てられた引数を返します。 次の場合、切り捨ては 0 に向かって行われます。
x> 0。
ランド() 乱数を返す n、0≤n
地獄([式])
のシード値を設定します ランド 〜へ 式 または、次の場合は時刻を使用します 式 省略されます。
以前のシード値が返されます。
String 機能
次のリストの文字列関数がサポートされます。 ただし、文法 (を参照)
文法) は、組み込み関数が引数や括弧なしで表示されることを許可します。
引数または括弧は、次のリストでオプションとして示されています (表示によって
それらの中で 「[]」 かっこ)、そのような使用は定義されていません。
gサブ(特長, 繰り返し[, in])
のように振る舞う 以下 (以下を参照)。
正規表現 ( ed ユーティリティ グローバル代替) $0 または in
指定された場合の引数。
index(s, t)
文字列内の 1 から数えた位置を文字数で返します s ここで文字列 t
最初に発生するか、まったく発生しない場合はゼロ。
長さ[([s])]
文字列として取得された引数の長さ、または
引数がない場合は、レコード全体、$0。
match (s, 特長)
文字列内の 1 から数えた位置を文字数で返します s どこ
拡張正規表現 特長 発生するか、まったく発生しない場合はゼロ。
RSTART は開始位置に設定されます (これは、返された
value)、一致が見つからない場合はゼロ。 RLENGTH は、
一致した文字列、一致が見つからない場合は -1。
split(s, a[, fs ])
文字列を分割する s 配列要素に a[1] a[2]、...、 a[n]、 そして戻る n。 すべて
配列の要素は、分割が実行される前に削除されます。 の
分離は ERE で行われます fs またはフィールドセパレータを使用 FS if fs is
与えられていません。 各配列要素は、作成時に文字列値を持ち、
適切な場合、配列要素は数値文字列と見なされます (参照
式 in awk)。 の値としてのヌル文字列の効果 fs is
不特定。
スプリント(FMT, 式, 式、...)
に従って式をフォーマットします。 printf によって与えられる形式 FMT そして戻る
結果の文字列。
サブ(特長, 繰り返し[, in ])
文字列を置き換える 繰り返し 拡張の最初のインスタンスの代わりに
正規表現 ERE 文字列で in 置換の数を返します。 アン
('&') 文字列に現れる 繰り返し 文字列に置き換えられます
from in ERE に一致します。 アンの前にしなければならない
文字通りに解釈されるキャラクター。 XNUMXつの発生
連続文字は単一のリテラルとして解釈されます
キャラクター。 その他の(例えば、
他の文字の前) はリテラルとして扱われます
キャラクター。 場合に注意してください 繰り返し 文字列リテラル (字句トークン STRING; 湖
文法)、の取り扱い文字は語彙の後に出現します
字句を含む処理・エスケープシーケンス処理。 もしも in
が指定されており、左辺値ではありません (参照 式 in awk)、動作は
未定義。 もしも in 省略、 awk その代わりに現在のレコード ($0) を使用します。
substr(s, m[, n ])
最大でも返します n-の文字部分文字列 s 位置で始まる m,
1 から数えます。 n が省略されている場合、または n より多くの文字を指定します
文字列に残っている場合、部分文字列の長さは長さによって制限されます
文字列の s.
低い(s)
文字列に基づいて文字列を返します s. 中の各キャラクター s それは大文字です
を持つように指定された文字 低い によるマッピング LC_CTYPE のカテゴリ
現在のロケールは、返された文字列で小文字に置き換えられます
マッピングによって指定されます。 の他のキャラクター s で変更されないものとします。
返された文字列。
トッパー(s)
文字列に基づいて文字列を返します s. 中の各キャラクター s それは小文字です
を持つように指定された文字 トッパー によるマッピング LC_CTYPE のカテゴリ
現在のロケールは、返された文字列で大文字に置き換えられます
マッピングによって指定されます。 の他のキャラクター s は変更されません。
文字列。
取る前述のすべての関数 ERE パラメーターとして、パターンまたは文字列が必要です
で定義されている正規表現である値付き式 レギュラー 式.
入力/出力 全般 機能
入出力および一般的な機能は次のとおりです。
閉じる(表現)
によって開かれたファイルまたはパイプを閉じます。 印刷 or printf ステートメントまたはへの呼び出し
ゲットライン 同じ文字列値を持つ 表現. オープン数の制限
表現 引数は実装定義です。 クローズが成功した場合、
関数はゼロを返します。 それ以外の場合は、ゼロ以外を返します。
表現 | ゲットライン [VAR]
コマンドの出力からパイプされたストリームから入力のレコードを読み取ります。 の
の値を持つストリームが現在開いていない場合、ストリームが作成されます。
表現 コマンド名として。 作成されたストリームは XNUMX つと同等でなければなりません
への呼び出しによって作成された ポペン() の値を持つ関数 表現 として
command 引数と値 r として モード 口論。 ストリームがある限り
開いたまま、その後の呼び出し 表現 同じ文字列に評価されます
値は、ストリームから後続のレコードを読み取ります。 流れは残る
までオープン 閉じる 関数は、次のように評価される式で呼び出されます
同じ文字列値。 その時点で、ストリームは次の呼び出しによって閉じられます。
閉じる() 関数。 もしも VAR が省略され、$0 および NF 設定する必要があります。 それ以外は、 VAR
設定され、適切な場合、数値文字列と見なされます (参照
式 in awk).
当学校区の ゲットライン 演算子がある場合、あいまいな構造を形成できます。
の左側に括弧で囲まれていない演算子 (連結を含む) '|' (に
を含む式の先頭 ゲットライン)。 の文脈では、 '$'
オペレーター、 '|' よりも優先順位が低いかのように動作します。 '$'。 結果
他の演算子を評価する方法は規定されておらず、適合するアプリケーションは
そのような使用法はすべて適切に括弧で囲んでください。
ゲットライン 現在の入力ファイルからの次の入力レコードに $0 を設定します。 この形の
ゲットライン を設定するものとします NF, NR, FNR 変数。
ゲットライン VAR
変数を設定する VAR 現在の入力ファイルから次の入力レコードへ
適切な、 VAR 数値文字列と見なされます (参照 式 in awk).
この形式の ゲットライン を設定するものとします FNR NR 変数。
ゲットライン [VAR] < 表現
指定されたファイルから入力の次のレコードを読み取ります。 の 表現 しなければならない
パス名として使用される文字列を生成するために評価されます。 そのファイルなら
name は現在公開されていません。公開される予定です。 流れが続く限り
オープン、後続の呼び出し 表現 同じ文字列値に評価されます
ファイルから後続のレコードを読み取ります。 ファイルは、
閉じる 関数は、同じに評価される式で呼び出されます
文字列値。 もしも VAR が省略され、$0 および NF 設定する必要があります。 それ以外は、 VAR しなければならない
設定され、適切な場合、数値文字列と見なされます (参照
式 in awk).
当学校区の ゲットライン 演算子がある場合、あいまいな構造を形成できます。
括弧で囲まれていない二項演算子 (連結を含む) '<'
(を含む式の終わりまで ゲットライン)。 結果として
そのような構造を評価することは規定されておらず、適合するアプリケーションは
そのような使用法はすべて適切に括弧で囲んでください。
(表現)
によって与えられたコマンドを実行します 表現 と同等の方法で ()
POSIX.1‐2008 の System Interfaces ボリュームで定義されている関数を呼び出して、
コマンドの終了ステータス。
のすべての形式 ゲットライン 入力が成功した場合は 1、ファイルの終わりの場合は 1、終了の場合は -XNUMX を返します。
エラー。
ファイルまたはパイプラインの名前として文字列が使用されている場合、アプリケーションは、
文字列がテキスト的に同一であること。 「同じ文字列値」という用語は、
その「同等の文字列」 文字、表す
別のファイル。
ユーザー定義の 機能
当学校区の awk language は、ユーザー定義関数も提供します。 このような関数は次のように定義できます。
function 名([パラメーター、 ...]){ 文 }
関数は、任意の場所で参照できます。 awk プログラム; 特に、その使用は
その定義に先行します。 関数のスコープはグローバルです。
関数パラメーターが存在する場合は、スカラーまたは配列にすることができます。 振る舞いは
関数がスカラーとして使用するパラメーターとして配列名が渡された場合は未定義、または
関数が配列として使用するパラメーターとしてスカラー式が渡された場合。
関数パラメーターは、スカラーの場合は値によって、配列名の場合は参照によって渡されます。
関数定義のパラメーターの数は、の数と一致する必要はありません。
関数呼び出しのパラメーター。 余分な仮パラメータは、ローカル変数として使用できます。
関数呼び出しで提供される引数が、関数定義よりも少ない場合、
関数本体でスカラーとして使用される追加のパラメーターは、
他の方法で初期化されるまで初期化されていない値、および追加のパラメーター
配列として関数本体で使用される場合、初期化されていない配列として扱われます。
各要素は、別の方法で初期化されるまで、初期化されていない値として評価されます。
関数を呼び出すとき、関数名と関数の間に空白を入れることはできません。
左括弧。 関数呼び出しは入れ子にすることができ、再帰呼び出しを行うことができます
機能。 ネストされた関数呼び出しまたは再帰関数呼び出しから戻ると、すべての値
渡された配列パラメーターを除いて、呼び出し元の関数のパラメーターは変更されません。
参考までに。 の return ステートメントを使用して値を返すことができます。 もし return ステートメント
が関数定義の外にある場合、動作は未定義です。
関数定義では、 文字はオープニングの前に任意でなければならない
ブレースと閉じブレースの後。 関数定義は、プログラムのどこにでも記述できます
どこ パターンアクション ペアが許可されます。
文法
このセクションの文法と次のセクションの語彙規則は、
一緒に構文を記述します awk プログラム。 このスタイルの一般的な規則は
文法はで説明されています セクション 1.3, 文法 表記. 有効なプログラムは
非終端記号として表される プログラム 文法で。 この正式な構文は、
前述のテキスト構文の説明よりも優先されます。
%トークン NAME 数 STRING ERE
%トークン FUNC_NAME /* お名前 続いて by '(' 無し 白 スペース。 */
/* キーワード */
%token 開始 終了
/* 'BEGIN' 'END' */
%token ブレーク 継続 削除 Do Else
/* 'break' 'continue' 'delete' 'do' 'else' */
%token 関数の終了 If In
/* 'exit' 'for' 'function' 'if' 'in' */
%token Next Print Printf Return While
/* 'next' 'print' 'printf' 'return' 'while' */
/* 予約済みの関数名 */
%トークンBUILTIN_FUNC_NAME
/* 以下の XNUMX つのトークン:
* atan2 cos sin exp log sqrt int rand srand
* gsub インデックスの長さの一致分割 sprintf sub
* substr tolower toupper close システム
*/
%トークンGETLINE
/* 他のビルトインとは構文が異なります。 */
/* XNUMX 文字のトークン。 */
%token ADD_ASSIGN SUB_ASSIGN MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN POW_ASSIGN
/* '+=' '−=' '*=' '/=' '%=' '^=' */
%token OR AND NO_MATCH EQ LE GE NE INCR DECR APPEND
/* '||' '&&' '!~' '==' '<=' '>=' '!=' '++' '--' '>>' */
/* XNUMX 文字のトークン。 */
%token '{' '}' '(' ')' '[' ']' ',' ';' 改行
%token '+' '−' '*' '%' '^' '!' '>' '<' '|' '?' ':' ' " " ' '$' '='
%プログラムを開始
%%
プログラム : item_list
| | actionless_item_list
;
item_list : newline_opt
| | actionless_item_list アイテム ターミネータ
| | item_list アイテム ターミネータ
| | item_list アクション ターミネータ
;
actionless_item_list : item_list パターン ターミネータ
| | actionless_item_list パターン ターミネータ
;
アイテム:パターンアクション
| | 関数名 '(' param_list_opt ')'
newline_opt アクション
| | 関数 FUNC_NAME '(' param_list_opt ')'
newline_opt アクション
;
param_list_opt : /* 空 */
| | param_list
;
param_list : 名前
| | param_list ',' 名前
;
パターン : 開始
| | 終わり
| | 式
| | expr ',' newline_opt expr
;
アクション: '{' newline_opt '}'
| | '{' newline_opt 終了ステートメント リスト '}'
| | '{' newline_opt unterminated_statement_list '}'
;
ターミネータ : ターミネータ ';'
| | ターミネーター NEWLINE
| | ';'
| | 改行
;
終了した_ステートメント_リスト: 終了した_ステートメント
| | 終了ステートメント_リスト 終了ステートメント
;
unterminated_statement_list : unterminated_statement
| | terminate_statement_list unterminated_statement
;
terminate_statement : アクション newline_opt
| | If '(' expr ')' newline_opt 終了ステートメント
| | If '(' expr ')' newline_opt 終了ステートメント
Else newline_opt terminate_statement
| | While '(' expr ')' newline_opt 終了ステートメント
| | '(' simple_statement_opt ';' の場合
expr_opt ';' simple_statement_opt ')' newline_opt
終了ステートメント
| | '(' NAME In NAME ')' の場合 newline_opt
終了ステートメント
| | ';' newline_opt
| | terminatable_statement NEWLINE newline_opt
| | terminatable_statement ';' newline_opt
;
unterminated_statement : terminatable_statement
| | If '(' expr ')' newline_opt unterminated_statement
| | If '(' expr ')' newline_opt 終了ステートメント
それ以外の場合、 newline_opt unterminated_statement
| | while '(' expr ')' newline_opt unterminated_statement
| | '(' simple_statement_opt ';' の場合
expr_opt ';' simple_statement_opt ')' newline_opt
unterminated_statement
| | '(' NAME In NAME ')' の場合 newline_opt
unterminated_statement
;
terminatable_statement : simple_statement
| | 壊す
| | 継続する
| 次
| | expr_opt を終了する
| | expr_opt を返す
| | '(' expr ')' の間に newline_opt terminate_statement を実行します
;
simple_statement_opt : /* 空 */
| | シンプルステートメント
;
simple_statement : NAME '[' expr_list ']' を削除します
| | 式
| | print_statement
;
print_statement : simple_print_statement
| | simple_print_statement output_redirection
;
simple_print_statement : 印刷 print_expr_list_opt
| | Print '(' multiple_expr_list ')'
| | Printf print_expr_list
| | Printf '(' multiple_expr_list ')'
;
output_redirection : '>' expr
| | APPEND式
| | '|' 式
;
expr_list_opt : /* 空 */
| | expr_list
;
expr_list : expr
| | multiple_expr_list
;
multiple_expr_list : expr ',' newline_opt expr
| | multiple_expr_list ',' newline_opt expr
;
expr_opt : /* 空 */
| | 式
;
expr : unary_expr
| | non_unary_expr
;
unary_expr : '+' 式
| | '−'式
| | unary_expr '^' expr
| | unary_expr '*' expr
| | unary_expr '/' 式
| | unary_expr '%' 式
| | unary_expr '+' 式
| | unary_expr '−' expr
| | unary_expr non_unary_expr
| | unary_expr '<' expr
| | unary_expr LE 式
| | unary_expr NE expr
| | unary_expr EQ式
| | unary_expr '>' expr
| | unary_expr GE expr
| | unary_expr '~' expr
| | unary_expr NO_MATCH expr
| | NAME の unary_expr
| | unary_expr AND newline_opt expr
| | unary_expr または newline_opt expr
| | unary_expr '?' 式 ':' 式
| | unary_input_function
;
non_unary_expr : '(' expr ')'
| | 「!」 式
| | non_unary_expr '^' expr
| | non_unary_expr '*' expr
| | non_unary_expr '/' expr
| | non_unary_expr '%' expr
| | non_unary_expr '+' expr
| | non_unary_expr '-' expr
| | non_unary_expr non_unary_expr
| | non_unary_expr '<' expr
| | non_unary_expr LE expr
| | non_unary_expr NE expr
| | non_unary_expr EQ expr
| | non_unary_expr '>' expr
| | non_unary_expr GE expr
| | non_unary_expr '~' expr
| | non_unary_expr NO_MATCH expr
| | NAME の non_unary_expr
| | '(' multiple_expr_list ')' NAME 内
| | non_unary_expr AND newline_opt expr
| | non_unary_expr OR newline_opt expr
| | non_unary_expr '?' 式 ':' 式
| | 番号
| | ストリング
| | 左辺値
| | エレ
| | 左辺値 INCR
| | 左辺値 DECR
| | INCR 左辺値
| | DECR 左辺値
| | 左辺値 POW_ASSIGN expr
| | 左辺値 MOD_ASSIGN expr
| | 左辺値 MUL_ASSIGN expr
| | 左辺値 DIV_ASSIGN expr
| | 左辺値 ADD_ASSIGN expr
| | 左辺値 SUB_ASSIGN expr
| | 左辺値 '=' expr
| | FUNC_NAME '(' expr_list_opt ')'
/* '(' の前に空白を入れることはできません */
| | BUILTIN_FUNC_NAME '(' expr_list_opt ')'
| | BUILTIN_FUNC_NAME
| | non_unary_input_function
;
print_expr_list_opt : /* 空 */
| | print_expr_list
;
print_expr_list : print_expr
| | print_expr_list ',' newline_opt print_expr
;
print_expr : unary_print_expr
| | non_unary_print_expr
;
unary_print_expr : '+' print_expr
| | '-' print_expr
| | unary_print_expr '^' print_expr
| | unary_print_expr '*' print_expr
| | unary_print_expr '/' print_expr
| | unary_print_expr '%' print_expr
| | unary_print_expr '+' print_expr
| | unary_print_expr '-' print_expr
| | unary_print_expr non_unary_print_expr
| | unary_print_expr '~' print_expr
| | unary_print_expr NO_MATCH print_expr
| | unary_print_expr In NAME
| | unary_print_expr AND newline_opt print_expr
| | unary_print_expr または newline_opt print_expr
| | unary_print_expr '?' print_expr ':' print_expr
;
non_unary_print_expr : '(' expr ')'
| | 「!」 print_expr
| | non_unary_print_expr '^' print_expr
| | non_unary_print_expr '*' print_expr
| | non_unary_print_expr '/' print_expr
| | non_unary_print_expr '%' print_expr
| | non_unary_print_expr '+' print_expr
| | non_unary_print_expr '-' print_expr
| | non_unary_print_expr non_unary_print_expr
| | non_unary_print_expr '~' print_expr
| | non_unary_print_expr NO_MATCH print_expr
| | non_unary_print_expr In NAME
| | '(' multiple_expr_list ')' NAME 内
| | non_unary_print_expr AND newline_opt print_expr
| | non_unary_print_expr または newline_opt print_expr
| | non_unary_print_expr '?' print_expr ':' print_expr
| | 番号
| | ストリング
| | 左辺値
| | エレ
| | 左辺値 INCR
| | 左辺値 DECR
| | INCR 左辺値
| | DECR 左辺値
| | 左辺値 POW_ASSIGN print_expr
| | 左辺値 MOD_ASSIGN print_expr
| | 左辺値 MUL_ASSIGN print_expr
| | 左辺値 DIV_ASSIGN print_expr
| | 左辺値 ADD_ASSIGN print_expr
| | 左辺値 SUB_ASSIGN print_expr
| | 左辺値 '=' print_expr
| | FUNC_NAME '(' expr_list_opt ')'
/* '(' の前に空白を入れることはできません */
| | BUILTIN_FUNC_NAME '(' expr_list_opt ')'
| | BUILTIN_FUNC_NAME
;
左辺値: NAME
| | 名前 '[' expr_list ']'
| | '$' 式
;
non_unary_input_function : simple_get
| | simple_get '<' expr
| | non_unary_expr '|' simple_get
;
unary_input_function : unary_expr '|' simple_get
;
simple_get : GETLINE
| | GETLINE 左辺値
;
newline_opt : /* 空 */
| | newline_opt NEWLINE
;
この文法にはいくつかのあいまいさがあり、次のように解決する必要があります。
* 演算子の優先順位と結合性は、 表 4-1、 式
in 減少 優先順位 in awk.
*あいまいな場合は、 ほかに 直前の
if それは文法を満たすでしょう。
* 状況によっては、 (「/」) ERE を囲むために使用される
除算演算子。 これは、分割がどこであろうと、
演算子が表示される可能性があります。 は除算演算子と見なされます。 (ありません
単項除算演算子)
の各式 awk プログラムは、優先順位と結合規則に準拠しなければなりません。
あいまいさを解決するためにこれが必要ない場合でも。 たとえば、 '$' より高い
よりも優先 '++'、文字列 "$x++--" は有効ではありません awk 表現ですが、
として文法によって明確に解析されます 「$(x++)--」.
正式な文法からは明らかではないかもしれない XNUMX つの規則は、
文字は許容されます。 終了など、いくつかの明白な配置があります。
ステートメント、および逃げるのに使える間の文字
字句トークン。 加えて、 なしの文字文字はできる
コンマ、左中括弧、論理 AND 演算子 (「&&」)、論理 OR 演算子 ("||"),
do キーワード、 ほかに キーワード、および if, のまたは while
ステートメント。 例えば:
{ 印刷 $ 1、
$2 }
語彙 表記
の語彙規則 awk プログラムは、前述の文法に関して、
次のように:
1. 特に断りのない限り、 awk 可能な限り長いトークンまたはデリミタの先頭を認識します
特定の時点で。
2. コメントは、 キャラクター
によって終了しますが、次の発生を除きます。 . コメントは
レキシカル トークンを区切る場合を除き、効果はありません。
3. トークンとして認識される NEWLINE NEWLINE.
4. あ文字の直後に効果がないものとします。
5.トークン STRING 文字列定数を表すものとします。 文字列定数は次で始まる必要があります
キャラクター '"'. 文字列定数内では、 文字は
Base の表で指定されているように、エスケープ シーケンスを開始すると見なされます。
POSIX.1‐2008の定義ボリューム、 章 5, File フォーマット 表記法 ('\\', '\NS', '\NS',
'\NS', '\ n', '\NS', '\t', '\ v')。 さらに、エスケープシーケンス 表 4-2、 エスケープ
シーケンス in awk 認められるものとします。 あ文字列内で発生してはならない
絶え間ない。 文字列定数は、エスケープされていない最初の出現によって終了します。
キャラクター '"' 文字列定数を開始するものの後に。 の値
文字列は、すべてのエスケープされていない文字とエスケープの値のシーケンスでなければなりません
XNUMX つの区切り文字の間のシーケンス (ただし、XNUMX つの区切り文字を含まない) '"' 文字。
6.トークン ERE 拡張正規表現定数を表します。 ERE定数
で始まるものとしますキャラクター。 ERE 定数内では、
の表で指定されているように、文字はエスケープ シーケンスを開始すると見なされます。
POSIX.1‐2008の基本定義ボリューム、 章 5, File フォーマット 表記法。 に
さらに、エスケープシーケンス 表 4-2、 エスケープ シーケンス in awk しなければならない
認識された。 アプリケーションは、 ERE 内で発生しない
絶え間ない。 ERE 定数は、エスケープされていない最初の
ERE 定数を開始する文字の後の文字。 拡張レギュラー
ERE 定数によって表される式は、エスケープされていないすべてのシーケンスでなければなりません
XNUMX つの間のエスケープ シーケンスの文字と値。
区切り文字。
7. あ字句トークンを区切るか、または STRING or
ERE トークン。
8.トークン 数 数値定数を表すものとします。 その形式と数値は
と同等である XNUMX 進浮動定数 ISO C で指定されたトークン
標準、またはそれは XNUMX 進数のシーケンスであり、として評価されるものとします。
XNUMX 進数の整数定数。 さらに、実装は数値定数を受け入れる場合があります
と同等の形式と数値で XNUMX 進定数
XNUMX 進浮動定数 ISO C 標準で指定されたトークン。
値が大きすぎたり小さすぎたりして表現できない場合 ( セクション 1.1.2,
コンセプト 派生 from ISO C スタンダード)、動作は未定義です。
9. 移植可能な文字セットからのアンダースコア、数字、およびアルファベットのシーケンス
(POSIX.1-2008 の基本定義編を参照、 セクション 6.1, ポータブル 人格
作成セッションプロセスで) で始まり、 またはアルファベット文字は、
単語を理解する事です。
10. 以下の単語は、個々のトークンとして認識されるキーワードです。 の
トークンの名前はキーワードと同じです:
ベギン 削除 終わり function in printf
破る do 終了する ゲットライン 次の return
続ける ほかに の if 印刷 while
11. 次の単語は、組み込み関数の名前であり、組み込み関数として認識されます。
トークン BUILTIN_FUNC_NAME:
あたん2 gサブ ログ split 以下 トッパー
閉じる index match スプリント substr
COS int型 ランド 平方根
EXP 長さ 罪 地獄 低い
上記のキーワードと組み込み関数の名前は予約済みと見なされます
言葉。
12.トークン NAME キーワードまたは組み込みの名前ではない単語で構成されます
関数であり、直後に (区切り文字なしで) が続くことはありません。 '('
文字。
13.トークン FUNC_NAME キーワードまたは名前ではない単語で構成されるものとします。
組み込み関数の直後に (区切り文字なしで)、 '(' 文字。
当学校区の '(' 文字はトークンの一部として含まれません。
14. 次の XNUMX 文字のシーケンスは、名前付きトークンとして認識されます。
┌────────────┬──────────┬────────────┬──────────┐
│Next お名前 │ シーケンス │ Next お名前 │ シーケンス │
├────────────┼──────────┼────────────┼──────────┤
│ADD_ASSIGN │ += │ 勝ち目がない │ !~ │
│SUB_ASSIGN │ −= │ EQ │ == │
│MUL_ASSIGN │ *= │ LE │ <= │
│DIV_ASSIGN │ /= │ GE │ >= │
│MOD_ASSIGN │ %= │ NE │ != │
│POW_ASSIGN │^=│ 増分 │ ++ │
│OR │ || │ DECR │ −− │
│そして │ && │ 付記 │ >> │
└────────────┴──────────┴────────────┴──────────┘
15. 次の単一文字は、名前がトークンとして認識されるものとします。
キャラクター:
{ } ( ) [ ] , ; + - * % ^ ! > < | ? : " " $ =
トークン間に語彙のあいまいさがあります ERE そしてトークン 「/」 DIV_ASSIGN.
入力シーケンスが a で始まる場合任意の構文コンテキストでの文字
トークン 「/」 or DIV_ASSIGN 有効なプログラムの次のトークンとして表示される可能性があります。
認識できる XNUMX つのトークンが認識されるものとします。 他の構文では
トークンのコンテキスト ERE 有効なプログラムの次のトークンとして表示される可能性があります。
ERE 認識されるものとする。
EXIT ステータス
次の終了値が返されます。
0 すべての入力ファイルは正常に処理されました。
> 0エラーが発生しました。
を使用して、プログラム内で終了ステータスを変更できます。 終了する 式です。
結果 OF エラー
もしあれば file オペランドが指定され、指定されたファイルにアクセスできない場合、 awk 書くもの
診断メッセージを標準エラーに出力し、それ以上のアクションなしで終了します。
のいずれかで指定されたプログラム プログラム オペランドまたは プログラムファイル オペランドは
有効な awk プログラム (詳細説明セクションで指定されているように)、動作は次のとおりです。
未定義。
当学校区の フォロー中 セクション 有益です。
お申込み USAGE
当学校区の index, 長さ, match , substr 関数を類似のものと混同しないでください
ISO C 標準の関数。 の awk バージョンは文字を扱いますが、ISO C は
標準はバイトを扱います。
連結操作は、式ではなく隣接する式で表されるためです。
明示的な演算子、適切な演算子を強制するために括弧を使用する必要があることがよくあります
評価優先。
例
当学校区の awk コマンドラインで指定されたプログラムは、単一の内で最も簡単に指定されます
引用符 (たとえば、'プログラム') を使用するアプリケーションの場合 sh、理由 awk 一般的にプログラム
二重引用符を含む、シェルにとって特別な文字が含まれています。 ケースでは
どこ awk プログラムに単一引用符が含まれている場合、通常は指定するのが最も簡単です
ほとんどのプログラムは、シェルによって引用符で連結された単一引用符内の文字列として
一重引用符文字。 例えば:
awk '/'\''/ { 印刷 "見積もり:"、 $0 }'
接頭辞付きの単一引用符文字を含む標準入力からのすべての行を出力します
率:.
以下は簡単な例です awk プログラム:
1. フィールド 3 が 5 より大きいすべての入力行を標準出力に書き込みます。
$3 > 5
2. XNUMX 行ごとに次のように記述します。
(NR % 10) == 0
3. 正規表現に一致する部分文字列を含む任意の行を書き込みます。
/(G|D)(2[0−9][[:アルファ:]]*)/
4. を含む部分文字列を含む任意の行を出力します。 「G」 or 「D」、その後に一連の
数字と文字。 この例では文字クラスを使用しています 桁 アルファ 合わせて
言語に依存しない数字とアルファベットの文字:
/(G|D)([[:数字:][:アルファ:]]*)/
5. XNUMX 番目のフィールドが正規表現と一致し、XNUMX 番目のフィールドが一致する任意の行を書き込みます。
フィールドは次のことを行いません:
$2 " " /xyz/ && $4 ! " " /xyz/
6. XNUMX 番目のフィールドに:
$2 " " /\\/
7. XNUMX 番目のフィールドに. ご了承ください
-エスケープは XNUMX 回解釈されます。 文字列の字句処理で XNUMX 回
そして、正規表現の処理でXNUMX回:
$2 " " 「\\\\」
8. 各行の最後から XNUMX 番目と最後のフィールドに書き込みます。 フィールドを
:
{OFS=":";印刷 $(NF−1)、 $NF}
9. 各行に行番号とフィールド数を記入します。 三本の弦
行番号を表す、 、およびフィールドの数が連結されます
その文字列は標準出力に書き込まれます。
{印刷 NR 「」 NF}
10. 72 文字を超える行を書きます。
長さ($0) > 72
11. 最初の XNUMX つのフィールドを反対の順序で書き、 FSO:
{ 印刷 $ 2、 $1 }
12. 入力フィールドが a で区切られているのと同じまたと文字、または
両方:
ベギン { FS = "、[ \t]*|[ \t]+" }
{ 印刷 $ 2、 $1 }
13. 最初の列を合計し、合計と平均を出力します。
{s += $1 }
終わり {印刷 "和 is ", s, " 平均 は"、 s/NR}
14. XNUMX 行に XNUMX つずつ、逆の順序でフィールドを書き込みます (各行に複数の行が表示されます)。
{ の (i = NF; i > 0; −−ⅰ) 印刷 $i }
15.文字列の発生の間にすべての行を書き込みます start stop:
/始める/、 /止まる/
16. 最初のフィールドが前のフィールドと異なるすべての行を書き込みます。
$1 != 前のページ { 印刷; 前のページ = $1 }
17. シミュレートする echo:
ベギン {
の (i = 1; i < ARGC; ++i)
printf("%s%s", ARGV[i]、 i==ARGC−1?"\n":" ")
}
18. に含まれるパス接頭辞を書きます。 パス 環境変数、XNUMX 行に XNUMX つ:
ベギン {
n = split (環境["パス"]、 パス、 ":")
の (i = 1; i <= n; ++i)
印刷 パス[i]
}
19. という名前のファイルがある場合 フォームのページ ヘッダーを含む: ページ #
およびという名前のファイル プログラム 含まれるもの:
/ページ/ { $2 = n ++; }
{ 印刷 }
次にコマンドライン:
awk −f プログラム N = 5
ファイルを印刷します 、5 から始まるページ番号を記入します。
理論的根拠
この説明は、新しい awk, ``nawk'' (参考文献を参照) 当学校区の AWK
プログラミング 言語)、歴史的なものに多くの新機能を導入しました awk:
1. 新しいキーワード: 削除, do, function, return
2. 新しい組み込み関数: あたん2, 閉じる, COS, gサブ, match , ランド, 罪, 地獄, 以下,
3. 新しい定義済み変数: FNR, ARGC, ARGV, 再スタート, 長さ, サブセップ
4. 新しい式演算子: ?, :, ,, ^
5。 ザ FS 変数と XNUMX 番目の引数 split、拡張レギュラーとして扱われるようになりました
式。
6. 演算子の優先順位は、C 言語により厳密に一致するように変更されました。 XNUMX つの例
動作が異なるコードは次のとおりです。
while ( n /= 10 > 1) ...
if (!"wk" ~ /bwk/) ...
の新しい実装に基づいて、いくつかの機能が追加されました。 awk:
*複数のインスタンス −f プログラムファイル 許可されています。
* 新しいオプション −v 割り当て。
* 新しい定義済み変数 環境.
* 新しい組み込み関数 トッパー 低い.
* より多くの書式設定機能が追加されました printf ISO C 規格に適合します。
全般的に awk 構文は常に C 言語に基づいており、C 言語からのいくつかの機能があります。
シェル コマンド言語およびその他のソース。 このため、完全ではありません。
一部のユーザーに混乱を引き起こしている他の言語と互換性があります。 そうではない
そのような問題に対処する標準開発者の意図。 いくつかの比較的マイナーな
言語の ISO C 標準との互換性を高めるための変更が行われました。 多くの
これらの変更のうち、説明されているように、最近の実装における同様の変更に基づいています。
その上。 にないいくつかの C 言語の規則が残っています。 awk。 一つ
特筆すべきは、 複数を指定するために一般的に使用される演算子
C言語の式 の 声明。 また、いろいろなところに awk is
で使用できる式の種類に関して、C 言語よりも制限があります。
与えられたコンテキスト。 これらの制限は、さまざまな機能によるものです。 awk 言語
提供します。
の正規表現 awk 歴史的な実装からいくらか拡張されました
POSIX.1-2008 で定義されているように、それらを拡張正規表現の純粋なスーパーセットにします (
POSIX.1‐2008の基本定義ボリューム、 セクション 9.4, 延長された レギュラー 式).
主な拡張機能は、国際化機能と区間式です。 歴史的
の実装 awk 長く支えてきた-拡張としてのエスケープシーケンス
拡張された正規表現であり、この拡張は一貫性がないにもかかわらず保持されています
他のユーティリティと。 両方の拡張正規表現で認識されたエスケープ シーケンスの数
式と文字列は、実装によって異なります (一般的に時間とともに増加します)。
POSIX.1-2008 で指定されたセットには、一般的な
実装と ISO C 標準によって。 サポートされていない XNUMX つのシーケンスは
で始まる XNUMX 進値のエスケープ '\バツ'. これにより、より多くの値を表現できるようになります
内で使用される 9 ビットよりも awk ISO C 標準のように。 ただし、この構文のため、
非決定論的な長さを持つため、後続の文字を
XNUMX 進数。 この制限は、C 言語で以下を使用して処理できます。
レキシカル文字列連結。 の中に awk 言語、連結も解決策になる可能性があります
文字列用ですが、拡張正規表現用ではありません (レキシカル ERE トークンまたは
正規表現として動的に使用される文字列)。 この制限のため、機能
POSIX.1‐2008 には追加されていません。
通常拡張正規表現を使用するコンテキストで文字列変数を使用する場合
が表示されます (字句トークン ERE が文法で使用されている場合) 文字列に含まれていません
文字通り文字。
一部のバージョン awk 次のフォームを許可します。
ファンク 名前(引数、 ... ) { 文 }
これは、言語の作成者によって推奨されていません。
指定。
歴史的な実装 awk 次の場合にエラーを生成します 次の ステートメントはで実行されます
ベギン 行動、原因 awk 終了する 次の ステートメントは 終わり をご利用ください。
この動作は文書化されておらず、必要であるとは考えられていませんでした。
それを標準化します。
文字列と数値の間の変換の仕様は、はるかに詳細です
歴史的な実装のドキュメントまたは参照されているドキュメントよりも 当学校区の AWK
プログラミング 言語. ほとんどの動作は直感的に設計されていますが、
詳細は、異なる実装から互換性のある動作を確保するために必要です。 これ
オペランドの型が異なるため、関係式では特に重要です。
文字列または数値の比較を実行するかどうかを決定します。 の観点から
アプリケーション開発者は、通常、直感的な動作を期待して強制するだけで十分です。
式の型が
明らかに必要なものと一致しません。 意図は歴史を特定することでした
ほとんどすべての場合に実践します。 XNUMX つの例外は、歴史的な実装では、
変数と定数は、元の値の後に文字列と数値の両方を維持します
任意の使用によって変換されます。 これは、変数または定数を参照すると、
思わぬ副作用。 たとえば、歴史的な実装では次のようになります
プログラム:
{
a = 「+2」
b = 2
if (NR % 2)
c = a + b
if (a == b)
印刷 「数値 比較"
ほかに
印刷 "ストリング 比較"
}
奇数番号ごとに数値比較(および出力数値比較)を実行します
ただし、各イベントに対して文字列比較 (および出力文字列比較) を実行します。
番号付きの行。 POSIX.1-2008 は、必要に応じて比較が数値になることを保証します。 と
歴史的な実装、次のプログラム:
ベギン {
OFMT = "%e"
印刷 3.14
OFMT = "%NS"
印刷 3.14
}
出力します 「3.140000e+00」 二回、二回目だから 印刷 定数を宣言する
"3.14" 前の変換からの文字列値になります。 POSIX.1‐2008 では、
XNUMX番目の出力 印刷 ステートメントは "3.140000". ヒストリカルの振る舞い
実装は直感的ではなく、予測不可能であると見なされていました。
初期のドラフトに含まれていたルールでは、次のスクリプトが
何も出力しません:
ベギン {
y[1.5] = 1
OFMT = "%e"
印刷 y[1.5]
}
したがって、新しい変数、 CONVFMT、紹介されました。 の OFMT 変数は現在制限されています
数値から文字列への出力変換に影響を与え、 CONVFMT 内部に使用されます
比較や配列のインデックス付けなどの変換。 デフォルト値はそれと同じです
の OFMTですから、プログラムが変わらない限り CONVFMT (これは歴史的なプログラムではありません)、それは
内部文字列変換に関連する履歴動作を受け取ります。
POSIX awk 字句および構文規則は、他の規則よりも形式的に指定されています。
ソース。 繰り返しますが、その意図は歴史的な慣行を特定することでした。 XNUMXつのコンベンション
他の言葉による説明のように、形式的な文法からは明らかではありません。
文字は許容されます。 終了など、いくつかの明白な配置があります。
ステートメント、および逃げるのに使える間の文字
字句トークン。 加えて、 なしの文字文字はできる
コンマ、左中括弧、論理 AND 演算子 (「&&」)、論理 OR 演算子
("||") do キーワード、 ほかに キーワード、および if, のまたは
while ステートメント。 例えば:
{ 印刷 $ 1、
$2 }
その要件 awk 末尾を追加to プログラム引数テキストは to
文法を単純化し、形式がテキスト ファイルと一致するようにします。 方法はありません
リテラルかどうかを判断するためのアプリケーションまたはテスト スイート追加されるかどうか awk
あたかもそうであるかのように単に動作します。
POSIX.1-2008 をサポートするには、過去の実装からいくつかの変更が必要です。
国際化。 おそらくこれらの中で最も巧妙なのは、小数点の使用です。
によって定義される文字 LC_NUMERIC 表現におけるロケールのカテゴリ
浮動小数点数。 このロケール固有の文字は、数値の認識に使用されます
入力、文字列と数値の間の変換、および出力の書式設定に使用されます。
ただし、ロケールに関係なく、 文字 (小数点文字
POSIX ロケール) は、処理で認識される小数点文字です。 awk プログラム
(コマンド ライン引数での割り当てを含む)。 これは本質的に同じ規則です
ISO C 標準で使用されているものと同様です。 違いは、C 言語には
ロケールの設定() 関数。アプリケーションがそのロケールを変更できるようにします。 このため
C アプリケーションは、C ロケールに設定されたロケールで実行を開始します。
への明示的な呼び出しの後、環境指定のロケールで実行されます ロケールの設定()。
しかし、そのような精巧な新機能を awk 言語は次のように見られました。
POSIX.1‐2008 には不適切です。 を実行することが可能です awk 明示的にプログラムする
シェルで環境を設定することにより、目的のロケール。
拡張正規表現の NUL に起因する未定義の動作により、将来的には
GNU の拡張機能 ガック バイナリデータを処理するプログラム。
無効時の挙動 awk プログラム (字句、構文、および
セマンティック エラー) は、実装を過度に制限すると見なされたため、未定義です。
指定します。 ほとんどの場合、このようなエラーは診断を生成し、非エラーを生成することが期待できます。
ゼロの終了ステータス。 ただし、一部の実装では、言語を拡張することを選択する場合があります。
特定の無効な構造を利用するもの。 他の無効な構造が考慮される場合があります
警告に値しますが、それ以外の場合は合理的な動作を引き起こします。 さらに他の構造
一部の実装では検出が非常に難しい場合があります。 また、さまざまな実装
プログラムの最初の解析中に特定のエラーを検出する可能性があります (何かを読み取る前に)
入力ファイル) を読み込んだ後にプログラムを実行すると、他の人がそれを検出する可能性があります。
入力。 実装者は、できるだけ早くエラーを診断し、
有用な診断を生成することで、アプリケーションのデバッグが容易になるため、
実装がより使いやすくなります。
複数文字の使用による不特定の動作 RS 価値観は可能な未来を可能にすることです
レコード区切りに使用される拡張正規表現に基づく拡張。 歴史的
実装は文字列の最初の文字を取り、他の文字を無視します。
次の場合の未指定の動作 split(string,配列、 ) は、提案された未来を許可するために使用されます
文字列を個々の文字の配列に分割する拡張機能。
の文脈では ゲットライン 関数、さまざまな優先順位に対して同等に適切な引数
| < 演算子を作成できます。 歴史的な慣習は次のとおりです。
ゲットライン < 「あ」 「b」
次のように解析されます:
( ゲットライン < 「あ」 ) 「b」
多くの人は、その意図はファイルが ab 読むべきです。 でも:
ゲットライン < "NS" + 1
次のように解析します。
ゲットライン < ( "NS" + 1 )
で同様の問題が発生します。 | のバージョン ゲットライン、特に組み合わせて $.
具体的な例を挙げますと、以下の通りです。
$"エコー こんにちは " | ゲットライン
(この状況は、 印刷 ステートメント、ここで、
|ゲットライン 一部はのリダイレクトである可能性があります 印刷.)
ほとんどの場合、そのような構造は使用されない (または少なくとも使用されるべきではない) ため (
従来の構文解析がない自然な曖昧さがある)、これらの意味
構造は明示的に未指定にされています。 (効果は、適合する
問題が発生するアプリケーションは、あいまいさを解決するために括弧で囲む必要があります)。
そのような構造の実際の使用があったとしても、ほとんどないように思われました。
このような状況でエラーを引き起こす文法を書くことができます。 どこ
後方互換性は大きな考慮事項ではなく、実装者はそのような使用を望むかもしれません
文法。
一部の歴史的な実装では、一部の組み込み関数を呼び出しなしで呼び出すことができました。
引数リスト。その結果は、何らかの「合理的な」方法で選択されたデフォルトの引数リストです。
仕方。 の使用 長さ の同義語として 長さ($0) は、これらの形式の中で唯一のものです。
広く知られているか、広く使用されていると考えられています。 この特定の形式は、さまざまな文書で文書化されています
場所 (たとえば、最も歴史的な場所 awk 参照ページには含まれていませんが、参照ページ
当学校区の AWK プログラミング 言語)合法的な慣行として。 この例外により、デフォルト
引数リストは常に文書化されておらず、漠然と定義されており、まったくそうではありません
ユーザー定義関数に一般化する方法 (または場合) を明確にします。 彼らは役に立たない
関数に名前を付ける必要がある可能性のある将来の拡張機能を排除します
それらを呼び出すことなく。 それらを標準化しないのは、最も簡単な方法のようです。 標準
開発者はそれを考えました 長さ しかし、それは特別扱いに値する
過去に文書化されており、歴史的なプログラムで実質的に使用されている可能性があります。
したがって、この使用法は正当化されましたが、Issue 5 では廃止された
XSI 準拠の実装およびその他の多くの準拠アプリケーションのマーキング
この機能に依存します。
In 以下 gサブ、もし 繰り返し 文字列リテラル (字句トークン STRING)、その後 XNUMX
連続文字を文字列で使用して、単一の文字列を確保する必要があります。
に先行します結果の文字列が
関数。 (たとえば、XNUMX つのリテラルを指定するには置換文字列で、使用
gサブ(ERE, 「\\&」))
歴史的に、唯一の特殊文字 繰り返し の引数 以下 gサブ string
関数は('&') 文字の前に
文字は、その特別な意味を無効にするために使用されました。
ISO POSIX-2:1993 標準の記述では、次のような動作が導入されました。
character は別の特殊文字であり、存在するかどうかは不明でした
その他の特殊文字でした。 この説明により、いくつかの移植性が導入されました
問題のいくつかは以下で説明されているため、より多くのものに置き換えられました
歴史的説明。 問題のいくつかは次のとおりです。
* 歴史的に、置換文字列を作成するには、スクリプトで gサブ(ERE, 「\\&」),
しかし、ISO POSIX‐2:1993 標準の文言では、 gサブ(ERE,
"\\\\&")。 のすべての文字列リテラルは
語彙分析の対象となります。これにより、 する文字
独身者に渡される前に gサブ.
* 特殊文字が何であるかが特定されていなかったので、移植可能なスクリプトが
文字が文字通りに印刷されることを保証し、各文字の前に置く必要がありました
とともに. (たとえば、移植可能なスクリプトは、 gサブ(ERE, "\\こんにちは")へ
の置換文字列を生成する "こんにちは".)
ISO POSIX-2:1993 規格の比較の説明が適切に説明されていませんでした
これは、数値文字列を数値として比較する方法に起因する歴史的な慣例です。 の
現在のルールでは、次のコードが発生します。
if (0 == "000")
印刷 "変、 焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。 真実"
ほかに
印刷 "いいえ 真実"
数値比較を行うため、 if 成功するために。 直感的にわかるはず
これは正しくない動作であり、実際、歴史的な実装はありません awk 実際に
このように振る舞います。
この問題を解決するには、の定義 数値の string それらのみを含むように拡張されました
それ以外の特定の状況 (主に外部ソース) から取得した値
値が文字列か文字列かを明確に判断できる
数値。
数値文字列に割り当てられた変数も、数値文字列として扱われます。
(たとえば、数値文字列の概念は割り当て間で伝播できます。)
比較では、初期化されていない値を持つすべての変数が数値として扱われます
数値ゼロに評価されるオペランド。
初期化されていない変数には、スカラー、配列要素、
とフィールド。 の初期化されていない値の定義 変数 Special 変数 is
初期化されていない変数とフィールドに置かれた値を記述するために必要です。
有効です (たとえば、 < $ NF)が、文字が含まれておらず、これらがどのように記述されているかを説明する
変数は比較に使用されます。 次のような有効なフィールド $1、文字がありません
の入力行から取得できます "\t\t" を特定いたします。 FS='\t'. 歴史的に、
比較 ($110) 評価後に数値的に行われた $1 値ゼロに。
「... また、数値文字列の数値を持たなければならない」という句は削除されました
ISO POSIX-2:1993 標準のいくつかのセクションから
実装の詳細。 POSIX.1-2008 では、これらのオブジェクトを指定する必要はありません。
XNUMX つの異なる値が割り当てられます。 これらのオブジェクトが
コンテキストに応じて XNUMX つの異なる値に評価されます。
歴史的な実装 awk XNUMX 進整数または浮動定数を解析しませんでした
ような 「0xa」 "0xap0". この 2001 年版から 2004 年版は見落としにより、
標準では、XNUMX 進浮動小数点定数のサポートが必要でした。 これは、
への参照 アトフ(). このバージョンの規格では許可されていますが、必須ではありません
使用する実装 アトフ() であり、浮動小数点数がどのように処理されるかについての説明が含まれています。
過去の行動に一致する代替手段として認識されています。 この変更の意図は、
実装が浮動小数点定数を認識できるようにします。
ISO/IEC 9899:1990 規格または ISO/IEC 9899:1999 規格、および許可する (必須ではない)
XNUMX 進整数定数を認識する実装。
歴史的な実装 awk で浮動小数点無限大と NaN をサポートしていませんでした
数値の ストリング; 例えば、 「-INF」 「NaN」. ただし、 アトフ()または
ストロッド() 変換を行う関数は、これらの値が
ISO/IEC 9899:1999 標準の代わりに、関数の ISO/IEC 9899:1990 標準バージョン
バージョン。 見落としにより、この規格の 2001 年版から 2004 年版は
無限大と NaN のサポートを許可しますが、このリビジョンではサポートが許可されます (ただし、
必要)。 これは、の動作に対するサイレント変更です。 awk プログラム; たとえば、
POSIX ロケール式:
("-INF" + 0 < 0)
以前は値が 0 だったので、 「-INF」 0 に変換されましたが、現在は値 0 または
1.
未来 道順
なし。
onworks.net サービスを使用してオンラインで awkposix を使用する