Awk-workflow
AWK-ワークフロー
エキスパートのAWKプログラマになるには、その内部を知る必要があります。 AWKは、読み取り、実行、繰り返しという単純なワークフローに従います。 次の図は、AWKのワークフローを示しています-
Read
AWKは、入力ストリーム(ファイル、パイプ、またはstdin)から行を読み取り、メモリに保存します。
実行する
すべてのAWKコマンドは入力に順番に適用されます。 デフォルトでは、AWKはすべての行でコマンドを実行します。 パターンを提供することでこれを制限できます。
繰り返す
このプロセスは、ファイルが最後に達するまで繰り返されます。
プログラム構成
ここで、AWKのプログラム構造を理解しましょう。
BEGINブロック
BEGINブロックの構文は次のとおりです-
構文
BEGIN {awk-commands}
BEGINブロックは、プログラムの起動時に実行されます。 一度だけ実行されます。 これは変数を初期化するのに適した場所です。 BEGINはAWKキーワードであるため、大文字でなければなりません。 このブロックはオプションであることに注意してください。
ボディブロック
本体ブロックの構文は次のとおりです-
構文
/pattern/{awk-commands}
bodyブロックは、すべての入力行にAWKコマンドを適用します。 デフォルトでは、AWKはすべての行でコマンドを実行します。 パターンを提供することでこれを制限できます。 Bodyブロックにはキーワードがないことに注意してください。
ENDブロック
ENDブロックの構文は次のとおりです-
構文
END {awk-commands}
ENDブロックは、プログラムの最後に実行されます。 ENDはAWKキーワードであるため、大文字でなければなりません。 このブロックはオプションであることに注意してください。
シリアル番号、生徒の名前、科目名、取得したマークの数を含むファイル marks.txt を作成しましょう。
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
AWKスクリプトを使用して、ヘッダー付きのファイルコンテンツを表示します。
例
[jerry]$ awk 'BEGIN{printf "Sr No\tName\tSub\tMarks\n"} {print}' marks.txt
このコードが実行されると、次の結果が生成されます-
出力
Sr No Name Sub Marks
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
開始時に、AWKはBEGINブロックからヘッダーを出力します。 次にbodyブロックで、ファイルから行を読み取り、AWKの印刷コマンドを実行します。このコマンドは、コンテンツを標準出力ストリームに印刷するだけです。 このプロセスは、ファイルが最後に達するまで繰り返されます。