仕事がら、CSVファイルを編集する機会が多い。CSVファイルを編集する作業となると、一般的にはExcelを使用すると思うが、実に余計な事をしてくれてトラブルの元となるのでExcelは極力使いたくない。

具体的には、桁数の大きい数字を「文字列」ではなく、「数値」と勝手に解釈してくれたり、かっこで囲った数字をマイナス値として勝手に解釈してくれることなど。

「CSVファイルなんだから文字列として編集させてくれ!Excelは見やすく表に整形してくれるだけでええねん!」と声を大にして言いたいが、私の知っている範囲では、Excelを純粋なCSVエディタとして気楽に使用する方法は見あたらない。

勿論、拡張子を一度.TXTにしておいて、Excelから開くとして、カンマセパレートとか、文字列として取り込むとか、ウィザードで指定しながら取り込めば目的は達成出来るのだが、うざったくて仕方がない。

KutoCSVエディタがこの穴埋めをしてくれると期待していたのだが、レコード数が多くなると、べらぼう重くなってフリーズした様になる。とてもテキストエディタの様な軽快な動作は期待出来ない。PCのHDDランプを見ているとチラチラと点滅しているので、ディスクアクセスがボトルネックになっていると思われる。きょうびのアプリとしては、メモリー実装量に余裕があるならRAM上で処理して欲しいものである。改良を期待する。

そんな訳で私はプログラムを作れる方には、是非ともCSVの編集作業をサクサク快適に大量のデータでもパフォーマンスが落ちない仕組みでツールを開発して欲しいと本当に願っている。ネットショップを運営する人も多くなっているからニーズは間違いなくあると思う。残念ながら私にはそのかゆい所が分かるが、それを解消するツールを作る能力が無い。

ちなみにExcelは2007からは開けるレコード数(行数)が格段に多くなったが、それよりも古いExcelは6万何千行かで制限があある。OpenOffice.orgのCalcも最新版はこの制限が取れたので、かなり期待したのだが、レコード数の多いCSVを取り込むとフリーズする。つまり信頼性に欠ける。一番手っ取り早いのは正規表現の置換機能を実装したテキストエディタだったりする。しかしルーチンワークには向かない。

ここでもう、繰り返し同じ作業を毎日行うならスクリプト言語の出番だろうと、以前も記したawkの出番だと私は思った。ただ、UNIX系由来の古くから有るアプリケーションなので、コマンドラインでの操作が前提となる。ここがWindowsで育った人でそこを脱していない人には大きな壁になる。(Mac OS XはFreeBSDベースなUNIXなので、おそらくawkは標準で実装されていると思われるが検証する環境が無いので・・)

おーくの友だち」は、その隙間を埋めてくれる最高の友だちであると声を大にして言いたい。作ってくれた人素晴らしいと言いたい。

awkを使う目的の多くはテキスト処理である。というからには対象となるファイル(CSV形式とする)が存在して、そのデータに編集を加えた結果となる出力ファイルを求めているハズである。

ここで本来は、gawkはコマンドを使って、実行、スクリプトファイル、出力先ファイルなどの指定を行わなくてはならないのだが、GUIでそれらを解決してくれるのが「おーくの友だち」なのだ。実にわかりやすい。

試しに設定を終わらせた「おーくの友だち」関係と、日常扱っているデータを同梱してzipで固めて数人に送ったところ(一応説明書も作ったのに・・)、いきなり感覚的に操作して、「おおっ、一瞬で出来た凄い!」と説明書も読まずに目的を達成出来た。GUIの構造も優れているという事だ。

おーくの友だち 20110615 151254

いずれにしても、CSVファイルを扱う上では、awkは非常に強力なコマンドであり、それをWindows上で使える様にしてくれるgawkは素晴らしい。そしてそれをWindowsユーザーでも戸惑わずに使用できる「おーくの友だち」は素晴らしい組み合わせだ。

後は、awkスクリプトを組むだけだ。だが臆することなかれ、awkの概念を理解すれば、短いスクリプトで驚く程短時間で望む結果が得られることが出来るだろう。CSVファイルの編集を日常業務としているなら、awkのスクリプトを組むちょっとした努力(勉強)を惜しむのはもったいない。これはプログラマーではなく、プログラミングが苦手な私の発言だという事から、さほど敷居は高くないと捕らえて頂いて間違いない。

参考までにお伝えすると、楽天の在庫データ5万行オーバーを2つの処理をしてCSV出力するのに、数秒(3秒くらい)で終わった。KutoCSVエディタではフリーズした状態になり10分以上放置しても解除されず、Excelなら面倒な読み込みウィザードを通して複数の操作を行わなくてはならない。操作に慣れた人とそうでない人の作業時間も違うし、慣れ不慣れにかかわらず人的ミスも生じる可能性は否定出来ないだろう。

これでもawkを使わない理由はあるだろうか?
時代遅れだからせめてPerl使えって?
Perlは難しすぎる。教えてくれるなら話は別だけど。awkなら覚えることも少ないし、だけどこれでなんとかなるのだ。

非常に多くのパーツがあるブロックよりも、少ないけど厳選されたパーツのブロックの方が遊びやすいというのは幼い子供にも言えることじゃないかな。それで物足りなくなったら高度なおもちゃにステップアップすれば良い。いきなり電子ブロックを3歳児に与えても遊べない(楽しめない)だろう。


プログラミング言語AWK (新紀元社情報工学シリーズ)プログラミング言語AWK (新紀元社情報工学シリーズ)
著者:P. J. ワインバーガー
新紀元社(2004-01)
販売元:Amazon.co.jp
クチコミを見る

余談ながら、awkスクリプトの作成には、処理対象のサンプルレコード数を少なくして、休八のスクリプト言語支援ソフト「Piper」を使用して記述すると、スクリプトの検証に便利かも知れない。レコード数が多過ぎるとフリーズしちゃうので注意だ。awkコマンド、grepコマンド、sedコマンドをWindowsで使う為のノウハウと、コマンドラインプログラムの操作をちょっと(かなり?)便利にしてくれるツールである。さすがに本番のデータ(5万レコード)を処理対象にしたら・・一発でフリーズしたが。(苦笑

良い時代になった。どんどんステップアップして行けば、おもちゃはたくさん手に入る。Perlしかり、PHPしかり、Rubyしかり、Pythonしかり。いきなり高度なおもちゃではやっぱり楽しめない(目的に到達できない)と思うので、背丈にあったおもちゃを選ぶのも重要だと思う。プログラム入門者にもawkで触りを学習するには良い素材だと思う。