※ ChatGPTを利用し、要約された質問です(原文:数字の置換(引き算)sedコマンド?)
数字の置換(引き算)sedコマンド
数字の置換(引き算)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/PDBformat.html
の10. Coordinate Section 10. 座標(Coordinate Section)に詳しい記述がありますので、御参考にしてください。
Sedコマンドなどを用いてやるのかなと思っておりますが、よくわかりませんので質問させていただきました。
お礼
おっしゃる通り、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 とするようです。