AWKAWKのロゴ
登場時期.mw-parser-output .plainlist--only-child>ol,.mw-parser-output .plainlist--only-child>ul{line-height:inherit;list-style:none none;margin:0;padding-left:0}.mw-parser-output .plainlist--only-child>ol li,.mw-parser-output .plainlist--only-child>ul li{margin-bottom:0}
1977年
AWK(オーク)は、プログラミング言語の一つ。テキストファイル、特に空白類(スペースの他、タブなど)やカンマなどで区切られたデータファイルの処理を念頭に置いた仕様となっているが、一般的なプログラミングに用いることも可能である。UNIX上で開発された。 AWKは、ベル研究所におけるUNIX開発の過程で、sedやgrepのようなテキスト処理ツールに演算機能を持たせた拡張ツールとして1977年[1]に開発された。そのため、UNIX上のユーティリティである sort の存在を前提としている[1]。 簡単なスクリプトを記述することで効率的にテキストファイルを処理することが目的であった。当初はそれほど多くの機能は無かったが、普及するにつれ、さまざまな処理をAWKで実行したいと考えるユーザーが増え、その希望に応えて1985年[1]に機能の拡張が行われた。その結果、汎用のプログラミング言語と比べても遜色が無いほどの機能を持つようになり、テキスト処理だけに留まらず、開発者も予想しなかったような大規模なプログラミングに使われるような例もあらわれた。一方、本来のテキスト処理用ツールとしても扱いやすく、現在でもCSV形式のファイルを簡易に処理する、などの目的で広く使用されている。 「AWK」という名称は、開発者であるアルフレッド・エイホ、ピーター・ワインバーガー、ブライアン・カーニハンの3人の苗字の頭文字を取って付けられたものであるが、AWKは「オーク」と読み、「エー・ダブリュー・ケー」と読んではならないと著者らはしている[注釈 1]。また、全て小文字でawkとした場合、Unix系OSないしPlan 9における、AWKのインタプリタ処理系プログラム自体(他の多くのコマンドと同じく全て小文字である)を指してそうしていることがある。 AWKのスクリプトは、パターンとアクションの組を並べた形になっている。実行を開始すると、まずBEGINパターンのアクションを実行する。以降、入力を読み込んでは、レコード分離文字(既定では改行)までを1レコードとし、ユニット分離文字(既定では連続するスペースまたは水平タブ)に従ってフィールドに分割してから、レコードがパターンにマッチするかを調べ、パターンにマッチしたらそのパターンに対応するアクションを実行する。一致するパターンが複数ある時は、該当するアクションが上から順に全て実行される。これを入力が尽きるまで繰り返す。入力が尽きたら、ENDパターンのアクションを実行し、終了する。すなわち、テキストストリームをシーケンシャルに読み込み、入力されるテキストストリームをレコードセパレータ毎に区切り、1行毎にスクリプトに記述されたアクションを順次実行する。 ファーストクラスのデータ型は、数値(全て倍精度浮動小数点型で扱われる)と文字列である。 他に文字列をキーとした連想配列があるが、連想配列はファーストクラスではなく関数の返戻値にできないなどデータというよりは、配列変数という変種の変数があるといったような扱いである。連想配列の中身(要素)を連想配列にすることはできないため、ループするようなデータ構造を作ることは不可能。連想配列のキーに数値を使うと、文字列に変換したものがキーとなる。arr[x, y]のようにして多次元配列のように見えるアクセスもできるが、実際には各次元を必要であればまず文字列化した後に、グローバル変数SUBSEPの文字列(デフォルトではU+001C <control-001C>)をセパレータとして連結した文字列をキーとしてアクセスする。 スクリプトの基本構成は次のようになる。BEGIN { 開始時処理}パターン1 { アクション1}パターン2 { アクション2}……# コメントEND { 終了時処理} BEGIN,ENDアクションは必須ではない。 例として、テキストファイル内の全ての行のうち、空行の数と「林檎」・「りんご」または「リンゴ」という文字列を含む行の数をそれぞれ出力するAWKプログラムを示す。
概要
AWKの文法
基本構成
Size:36 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef