awkがCSVファイルの編集や、情報抽出に非常に相性の良いツールだという事は、使ってみて初めて理解できることだと思いますので、ここでいっちょ例題というかやってみようと思います。

素材は、日本郵便が提供している郵便番号データとします。全国版をダウンロードして圧縮を解凍し、テキストエディタで開くと12万行以上あることが分かります。

MS-ExcelでもCSVファイルを読み込む事は出来ますが、Excel 2003までは6万数千行までしか読み込めませんので全国分は一度には作業出来ません。Excel 2007以降なら12万行でも読み込めますけどね。最近のバージョンであれば、無料で使用出来るオフィススイートOpenOfficeやLibreOfficeのCalcでも大丈夫です。

ファイルを開けるという話で言えば、表計算でも可能ですが、実際に抽出処理を行うとawkの処理能力の素晴らしさが一気にアピール出来ます。是非とも実際にやってみていただきたいです。

例えば、欲しい列(郵便番号、都道府県、市、町名番地)を抜き出すとしましょう。表計算ならKEN_ALL.CSVを開いて、不要な列を削除して、別名で保存という感じの手作業になると思います。PCのスペックによってはもっさりした動作になるかも知れません。

キャプチャ

awkなら下記のスクリプトを通すだけで一瞬です。

BEGIN{
	FS=",";
	OFS=",";
}
{
	print $3,$7,$8,$9;
}
END{
}

これじゃあまだawkの素晴らしさは表せませんね。大阪府だけ絞り込んでみます。

BEGIN{
 	FS=",";
 	OFS=",";
}
$7 ~ /大阪府/{
	print $3,$7,$8,$9;
}
END{
}

ほぼ一瞬で7カラム目が大阪府の情報のみ抽出されます。
では東京都も含めて抽出してみます。

BEGIN{
	FS=",";
	OFS=",";
}
$7 ~ /(大阪府|東京都)/{
	print $3,$7,$8,$9;
}
END{
}

処理は本当に一瞬とも言える位の短時間です。
表計算での処理はどうでしょうか?場合によっては凄くレスポンスが遅くなったり、固まったりする事を私は経験しています。(Windows XP,Windows 7において)

特に仕事におけるルーチンワークなら、基本知識を使うだけでも結果が得られ、かつ高速に処理されるawkのアドバンテージは高いと思います。

私 自身、ネットショップの商品情報等をCSVファイルで操作していた経験もありますので、CSVファイルがawkと相性が良いのは実際に体験済みです。というかawkナシでは作業出来ないという状態になっていました。もちろん目的によって使い分けていましたけどね。私にとってawkは便利なツールの一選択肢であり、なんでもかんでもawkで完結させようなんてこれっぽっちも思っていません。簡単に使えて欲しい結果が得られるからawkを使うのです。

また、awkは非プ ログラマーにこそオススメします。なぜならプログラマーならPerlやRuby等のより強力なスクリプト言語を扱えば、awkよりもっと柔軟な事が出来ますがどうしてもスキルとして習得する必要があります。言い換えるとプログラミングスキルが必要です。それってプログラマーの特権ですから万人に要求出来ないスキルです。

その点、awkは理解が容易なのでプログラミングスキルが無くても欲しい結果が得られる可能性が高いのです。それはawkの仕様がCSVと相性が良いからです。CSVデータなら何でもOKというわけではありませんが、CSVデータならawkで容易に処理出来る可能性が非常に高いのです。

余談ながら、FileMaker Proで作られた会員名簿の郵便番号データを更新したいと相談されたことが有ります。当時行数が多すぎてExcel 2003で開くことが出来なかった為、テキストエディタで3分割して処理する? という状況であり、なんとか工夫するしかありませんでした。ふと思いついてLinuxサーバー上のawkで全国版の郵便番号を加工したのがawkを初めて業務に使ったきっかけでした。一瞬で処理出来たのでこれは使える!と確信した瞬間でした。

Excelを始めとした表計算アプリは非常に優れたツールですが、アプリケーションの構造上、PCのリソースを要求するものです。12万行オーバーのデーターを扱うとなると、処理を重ねればどんどん重くなっていきます。その点awkは古いプログラムですが、一行読み込んで処理して次の行を読んで処理するという繰り返し処理を行う仕様の軽いプログラムです。今の時代でもこの軽快さは特筆モノです。いや、PCのスペックが上がったからこそawkという仕組みが非常に高速な処理を実現するのでしょう。現代のPCでもawkが稼働することに感謝します。

さて出来上がった12万行オーバーの加工済み郵便番号データをFileMakerにインポート(テーブル更新)する際、非常に時間がかかったことを記しておきます。たかが郵便番号データ、されど12万です。データベースアプリにもそれくらい負荷がかかるボリュームなのです。シンプルな処理を行うのが目的なら、awkならば本当に一瞬で終わるのです。