プロが教える店舗&オフィスのセキュリティ対策術

数字の置換(引き算)sedコマンド?
1________2_________3_________4_________5_________6_________7______
123456789012345678901234567890123456789012345678901234567890123456
ATOM______1__N___VAL_____1______38.983__13.792__44.273__0.00__0.00

ATOM___1537__OXT_ALA____95______35.430_156.289__27.449__0.00__0.00
TER_______0______________0
ATOM___1538__N___VAL____96______39.910__13.799__36.762__0.00__0.00

ATOM___3074__OXT_ALA___190______25.170 150.107___6.221__0.00__0.00

上記のようなファイルを対象としています。
上記のファイルの説明を行います。
初めの二行(数字とアンダーバーが書いてある部分)は説明のために付け加えたもので、ファイル中には存在しません。
上の例の3行目から本来のファイルはスタートします。
…は省略を表し、TERは本来ならば1538行目です。
TERの次の行からさらに1537行の情報があります。
これはpdbファイルというもので、18~21列目の番号は原子につけたもので、34~36列目の数字は、アミノ酸残基数を表します。また43列目以降は座標の位置を表します。
本来のファイルにはアンダーバーはありませんが、投稿時に空白はまとめられてしまうので、アンダーバーで置換しております。

ここで質問ですが、TER(1539行目)以降の34~36列目の数字を置換したいと考えております。具体的には、
96→1
97→2

190→95
というように置換したいと思います。

以下、留意していただきたい点を書きます。
courie newフォントで見ていただけると列が揃うので見やすいので、可能ならワードなどで張り付けてcourie newで見てください。
置換後の数字(1~95)の右端の数字は21列目になる必要があります。
置換前の数字(96~190)を含んでいる行数は一定ではありません。たとえば、96を指定の位置に持っている行は13行、97を指定の位置に持っている行は、10行などとなっております。
本ファイル(pdbファイル)の形式については、http://homepage2.nifty.com/copper29/ipr/PDBforma …
の10. Coordinate Section 10. 座標(Coordinate Section)に詳しい記述がありますので、御参考にしてください。
Sedコマンドなどを用いてやるのかなと思っておりますが、よくわかりませんので質問させていただきました。

A 回答 (1件)

>置換後の数字(1~95)の右端の数字は21列目になる必要があります。



この 21 というはこの説明だと 36 の間違いでは?
そうだとしたら awk でこんな感じでどうでしょう。

awk 'ter==1 && /^ATOM/ {printf "%s%3d%s\n", substr($0,1,23), $5-95, substr($0,27,40); next} /^TER/{ter=1} {print $0}' protein.pdb
    • good
    • 0
この回答へのお礼

おっしゃる通り、36でした。
上記のawkファイルでうまく置換することができ、また、本来の目的である、プログラムによる解析も行うことができました。感謝します。
awkの基本すらまだ理解しておりませんが、いまからそれぞれどういう意味をもつか勉強したいと思います。
ありがとうございました。

この質問と回答をご覧になったかたへ。
私も調べるまで知りませんでしたが、ファイルに出力する場合、
awk 'ter==1 && /^ATOM/ {printf "%s%3d%s\n", substr($0,1,23), $5-95, substr($0,27,40); next} /^TER/{ter=1} {print $0}' protein.pdb > new.pdb
とするようです。

お礼日時:2010/04/23 10:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!