「使い捨てプログラム」のすゝめ
(年の始めに)
「使い捨てプログラム」のすゝめ(年の始めに)
以前,ある研究室の先生から,「タンパク質のX線構造解析データを入手したが,三次元画像としてディスプレイに表示できない,どうにかならないか」という相談を持ちかけられた.
さっそくテキストエディターで開いてみると,簡単な結晶基本情報と「原子種,X座標,Y座標,Z座標」で構成された数千行に及ぶデータであった.ところが,各座標の数値の最後に括弧で測定値のばらつき度を示す標準偏差(赤文字部分)が書かれているため,先生手持ちのプログラムではエラーになり読み込めないことが分かった.
取り敢えず,テキストエディターで括弧とその中の文字を消去してみるということになった.ところが,いざやり始めると数が多くたいへん,今後のこともあるので「偏差値を消去するプログラム」を作ってほしいということになった.「学部の情報教育で教えているBASIC言語でも簡単に作ることができるのに」,「情報教育を受けている卒研生に頼めばよいのに」とか思ったが,結局簡単な「使い捨てプログラム」で処理してさしあげた.
今回のような文字列の処理は,AWKが便利である.AWKは,UNIX上で開発されたプログラミング言語でテキストファイルの処理に用いられる.
まず,発想の転換が必要である.この種のデータは,原子種,X座標,Y座標,Z座標が空白で区切られているので,当然4個の部分文字列が存在することになる.
一般的なプログラミング言語で偏差値削除プログラムを作るとすると,不要な部分(赤文字部分)の先頭からの位置を知って空白で置き換える等の繰り返し操作をすれば目的を達することができる.BASICやFORTRAN言語で書くとかなり面倒なものになる.
しかし,AWKではまったく発想が異なる.AWKでは「区切り文字」を自由に指定することができる.
処理対象の文字列は「括弧(緑)」で区切られた文字列と考える. 注)それぞれの文字列が持っている物理量との関連などは考えない.
そうすると,6個の部分文字列が存在することになる.
しかし,本例では二種類の括弧,左括弧と右括弧が存在する.
本例は,両方の括弧を用いて区切るので,正規表現(文字列の集合を一つの文字列で表現する方法)を使って「ひと括り」として指定する.
すなわち,[()]と書けば,“(” あるいは “)” のいずれかがあると「区切り」とみなすというわけである.
今回必要な部分文字列は,1番目(C 7.2325),3番目(2.1458),5番目(5.7894)である.これらを指定してプリントするスクリプト(print $1, $3, $5)を書いて実行すれば,目的の処理は完了する.
C 7.2325(5) 2.1458(4) 5.7894(3) → C 7.2325 2.1458 5.7894 (処理結果)
AWKの構文は次の通りである.
awk [-F区切り文字] スクリプト [入力ファイル名]
今回のプログラムは下記の通りである. 行の数だけ処理を繰り返してくれる(何回繰り返せ等のプログラムを書く必要はない).
awk -F"[()]" '{print $1, $3, $5}' cord
実際は,ファイルに保存するので,
awk -F"[()]" '{print $1, $3, $5}' cord > kekka
を実行する.処理結果はkekkaというファイルに書きだされる.cat kekkaを実行するとファイルの内容が表示される(実行結果参照).
折角作ったので保存しておきたい時は次のようにするとよい.
BEGIN { FS = "[()]"
}
{ print $1, $3, $5
}
これをファイル名kakkoで保存し,次行を実行する
awk -f kakko cord
1行の文字数,データの桁数が変わっても,偏差値が二桁になっても問題はない.他のプログラム言語で作るといろいろなケースを想定する必要があるが,AWKではたった一行のプログラムで処理が可能である.まさに,使い捨てプログラムの醍醐味である.少し勉強すれば,時間と金を費やすことなく簡単にプログラムが作れるようになる.私の場合は,当時の研究室の助手に「便利さ」を教えてもらった.PCがあれば自学できる言語である.
医薬品情報データベースは膨大な文字データであり,それを扱うのは薬剤師である.情報化社会に生きる薬剤師やアミノ酸やDNA配列データを取り扱う研究者にはAWKは必須であると確信した.そこで,この領域の教育(大学院生向け)の必要性を訴えたが,応えは「自分の研究室は原子レベルの議論はやっていない.貴研究室に配属されたITに長けた卒研生,院生に修得させればよいのでは?」というものだった.相談した相手がわるかったのかもしれないが,薬学人は概して新しい情報技術を積極的に受け入れることをしない傾向が強い事実を再認識せざるを得なかった.旧国立大学を定年になってかなりの時間が経ってしまったが,独立専攻大学院で予定していた情報処理演習が引き継がれているという話は聞こえてこない.
注)AWKはUNIX, Linux OS上で実行する.Macの場合は,OS XはUNIXベースのため,ターミナルを起動すればAWKが実行できる.viエディターが使えると便利であるが.viエディターが使えない場合はOS X上でテキストエディターでファイルを作っておいてターミナルでコマンドを実行すればよい. 実行例のデータは適当に作成した座標である.