チップス

スクリプト言語 awk を使って効率的にテキストデータを処理しよう


AWK は、簡単なスクリプトを記述することで、効率的にテキストファイルを処理することを目的として開発されたスクリプト言語でアルフレッド・エイホ(Alfred Aho)、ペーター・ワインバーガ(Peter Weinberger)、ブライアン・カーニハン(Brian Kernighan)の3人によって開発されました。3人の頭文字を取って awk (オーク) と命名されました。

プログラミング言語awk の序章に awk について端的に述べられています。

 コンピュータの利用者は、多くの時間をデータの書式を変更したり、その整合性を検査したり、ある性質を持った項目を探したり、数を足し込んだり、あるいはレポートを出力したりするような、単純で機械的なデータ操作に費やしている。これらの仕事の多くは機械化されるべきであるが、かといってそれらを処理する特別なプログラムを毎回 C や Pascal のような一般的な言語でかくのはばかげている。
 Awk はこういった仕事を、たいていは1行か2行で済むようなとても短いプログラムで始末できるように設計されたプログラミング言語である。Awk プログラムは、入力データのなかから見つけるべきパターンと、見つかったときに実行するアクションの列とからなっている。Awkは、それらのパターンのどれかと適合する行をファイルの集合のなかから探しだし、いったんそのような行が見つかれば対応するアクションを実効する。パターンは、正規表現と、文字列、数、欄、変数、それに配列要素の比較演算との組み合わせにより行を選択できる。アクションは、そうやって選択された行に対して任意の処理を実効できる。このアクションを記述する言語は C に似ているが、宣言を持たなかったり、文字列や数も組み込みのデータ型として備えている点がちょっと違う。
 Awk は入力ファイルを操作して、それぞれの入力行を自動的に欄に分解する。入力、欄への分解、記憶領域の管理、初期化など、とても多くのことが自動的に行われるので、awk プログラムは通常、より伝統的な言語で書くよりもずっと小さくなる。それゆえ awk のごく普通の使い方は、上で述べたようなデータ操作に類するものである。1行か2行の長さのプログラムは、キーボードから直接入力して一度だけ走らせ、そして捨てられる。実際 awk は、多数の特殊な道具やプログラムにとって代わる汎用のプログラム可能な道具である。
 Awk は、簡潔な氷原と便利な演算によって、より大きなプログラムの試作品を作る際の重要な道具にもなる。数行のものから始めて、お望みの仕事をこなせるようになるまでプログラムをすこしづつ仕上げていき、他の方法も簡単に試してみたりして、その設計が妥当かどうかを検査できる。そうしたプログラムは短いので、とっつきやすく、実権の結果他によい方法が見つかった場合でも簡単にやり直せる。さらに、いったん設計が正しいことが判明すれば、awk プログラムを他の言語に翻訳するのは実にたやすい。

awk 言語の使い方を覚えて、効率よく仕事をこなせるようになりましょう。

ubuntu に gawk をインストールする


sudo apt-get install gawk

Gnu awk 3.1.5以降の仕様は、length()がバイト単位ではなく、キャラクタ単位の文字数を返すようになっているので注意。

● awk で文字数をカウントする


gawk '{n += length($0)} END {print n}' foo.txt

   チップス