民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS awkが活躍する場面

<<   作成日時 : 2008/08/03 22:29   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

awkというツールがある。古くからあるUNIX系のツールで、Windowsにも移植されている。今まで名前は知っていたが、実際に使う場面というのがなかった。awkでできることは全部Perlでもできるし、自分はPerlで満足していたし。しかし、時と場合によっては、Perlでも出来なくはないが、awkでやったほうがはるかに便利なこともあると、今日、初めて知った。それは、固定長データの処理だ。
まず簡単にawkを紹介しておくと、行単位でデータを加工するのに便利な簡易プログラミング言語といったところだろうか。私のように、1行に1人ずつのデータが格納された名簿データを扱っていると、その加工、たとえば、住所は10文字ごとに切れ目を入れるとか、毎行5桁目に受験番号を連番で入れてやるとか、そういった作業を頻繁にやることになる。テキストエディタとExcelの組み合わせでどうにかならないこともないが、データの受け渡しでちょっと操作を誤ると、郵便番号の頭の0が飛んでしまったりするのでものすごく神経が疲れる。日に何十回もできる作業ではない。
それが、awkやPerlを使えば、コマンド一発、作業は速いし、手作業に起因するミスはないしで、いいことづくめだ。
というわけで、今までは専らPerlでばかり処理をしていた。awkでできることはどれもPerlでできるし、最近の高性能なPC上ではawkのほうが軽いといっても誤差の範囲だし、何といっても、awkとPerlの正規表現の細かい違いを覚えなくていい、というか混ぜて使ってとんでもないミスをするのが怖いという理由で、Windows上ではもちろんのこと、*NIX上でもPerlばかりを使っていた。
ところが、ふと調べて分かったのだが、入力が固定長データの場合は、awkのほうが処理が楽なのだ。
Perlでシャカシャカとsubstrを使って文字列を刻んでもいいのだが、awkなら、FIELDWIDTHS変数を適切にセットしてやることにより、一発で配列に取り込むことができる。配列に取り込んでしまえば、後はあんなこととか、こんなこととか、いくらでもやり放題だ。「固定長データ→awkスクリプト→CSVデータ→Perlスクリプト」というふざけた使い方もあり。固定長データを刻むPerlスクリプトを書くことを思えば、このほうがずっと楽だ。
加えて、テキストエディタxyzzyにはfilter-bufferという機能があって、テキストエディタ上のバッファの中身をawkで処理して再度エディタ上に読み込むという芸当ができる(いつもはPerlで処理しているのだが...)ので、こういう使い方でも便利だ。

awkについては、
http://www.kt.rim.or.jp/~kbk/gawk-30/index.html
このページの解説が分かりやすい。

そして、もう一つ、この本を紹介しておきたい。

AWKを256倍使うための本 (Ascii 256倍)
ASCII
志村 拓

ユーザレビュー:
プログラム例が命AW ...
とれないバグがとれた ...
私はこれで盲を開きま ...
amazon.co.jpで買う
Amazonアソシエイト by ウェブリブログ


何がすごいって、この本、内容が素晴らしい(面白い、楽しい)のはさておき、15年前に発行されて、今も現役で売られ続けている本なのだ。当然、Windows 95など無かったし、PC-UNIXやGNU/Linuxも今ほど普及していない時代なので、MS-DOS上での話ばかりになる。GO32なんて今時の若い人は...というのは置いておくにしても、「いいものは時代を超えて残る」のだなと、改めて感じさせられる。
この本の存在はそれこそ10年以上も前から知っていたのだが、昨日になって初めて買った。昔、パソコンをいじっていた頃のわくわく感がよみがえってきて、変に感動した。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
awkが活躍する場面 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる