-1

I have a pdb file which represent trajectory the file looks like

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

I want to print the information

MODEL        1
[all info]
TER
ENDMDL

For all the models. with preserving the format of the file. I tried this

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

But my file is so huge it is not possible to do manually. i want to save each model as model1, model2 and so on with their coordinate information till ENDMDL

1 Answers1

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

Explained:

/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
}
James Brown
  • 36,089
  • 7
  • 43
  • 59