2017-03-17 47 views
-1

每个文件我有一个PDB文件代表轨迹文件看起来像提取PDB trajctory

REMARK GENERATED BY TRJCONV 
TITLE  Protein in water t= 400.00000 
REMARK THIS IS A SIMULATION BOX 
CRYST1 99.547 99.547 99.547 90.00 90.00 90.00 P 1   1 
MODEL  1 
ATOM  1 N PRO A 1  46.850 67.380 57.030 1.00 0.00 
ATOM  2 H1 PRO A 1  46.230 66.770 56.500 1.00 0.00 
ATOM  3 H2 PRO A 1  46.420 68.290 56.940 1.00 0.00 
ATOM  4 CD PRO A 1  47.060 66.780 58.360 1.00 0.00 
TER 
ENDMDL 
REMARK GENERATED BY TRJCONV 
TITLE  Protein in water t= 800.00000 
REMARK THIS IS A SIMULATION BOX 
MODEL  10 
ATOM  1 N PRO A 1  46.850 67.380 57.030 1.00 0.00 
ATOM  2 H1 PRO A 1  46.230 66.770 56.500 1.00 0.00 
ATOM  3 H2 PRO A 1  46.420 68.290 56.940 1.00 0.00 
ATOM  4 CD PRO A 1  47.060 66.780 58.360 1.00 0.00 
TER 
ENDMDL 
REMARK GENERATED BY TRJCONV 
TITLE  Protein in water t= 1200.00000 
REMARK THIS IS A SIMULATION BOX 
MODEL  100 
ATOM  1 N PRO A 1  46.850 67.380 57.030 1.00 0.00 
ATOM  2 H1 PRO A 1  46.230 66.770 56.500 1.00 0.00 
ATOM  3 H2 PRO A 1  46.420 68.290 56.940 1.00 0.00 
ATOM  4 CD PRO A 1  47.060 66.780 58.360 1.00 0.00 
TER 
ENDMDL 

我想打印的信息

MODEL  1 
[all info] 
TER 
ENDMDL 

对于所有的车型。保留文件的格式。我试过这个

awk '/MODEL  1/,/ENDMDL/' test.pdb 

但是我的文件太大了,不可能手动完成。我想每个模式作为模型1,模型2等保存自己的坐标信息,直到ENDMDL

回答

2
$ awk '/MODEL/{f="model" $2 ".pdb"} f{print > f} /ENDMDL/ {close(f);f=""}' file 
$ cat model1.pdb 
MODEL  1 
ATOM  1 N PRO A 1  46.850 67.380 57.030 1.00 0.00 
ATOM  2 H1 PRO A 1  46.230 66.770 56.500 1.00 0.00 
ATOM  3 H2 PRO A 1  46.420 68.290 56.940 1.00 0.00 
ATOM  4 CD PRO A 1  47.060 66.780 58.360 1.00 0.00 
TER 
ENDMDL 

解释:

/MODEL/ {     # @ MODEL 
    f="model" $2 ".pdb" # use f as flag and target filename 
} 
f {      # when there is an f 
    print > f    # output to file in f 
} 
/ENDMDL/ {    # at the ENDMDL 
    close(f)    # close the file 
    f=""     # unset f 
} 
+1

谢谢你,但我要保存的每个模型model1.pdb,MODEL2。 pdb等。如果我使用这个代码,我只能得到单个文件。 – user2451501

+1

是的,它有助于将所有要求添加到问题中。 –

+1

非常感谢你:) – user2451501