pdbファイルからパターンマッチングの前後のすべてを削除する方法は?

pdbファイルからパターンマッチングの前後のすべてを削除する方法は?

test.pdb私はbashスクリプトの初心者ですが、pdbファイル()からこのファイルの前後のREMARK time 20.00すべての内容を削除しようとしていますREMARK time 30.00。私はこのsedコマンドを次のように使用しています。

sed 's/^.*\(REMARK time 20.00.*REMARK time 30.00\).*$/\1/' test.pdb > end.pdb

残念ながら、上記のコマンドは完全に空のend.pdbファイルを生成します。この問題を解決するのに役立ちますか?

私のtest.pdbファイルは次のとおりです。

REMARK time   10.00                                       ENERGY     1.95686E+03
HELIX    1 H1  GLU    131  SER    146  1                                      15
HELIX    2 H2  GLU    278  SER    293  1                                      15
HELIX    3 H3  GLU    426  SER    441  1                                      15
HELIX    4 H4  GLU    574  SER    589  1                                      15
SHEET    1 B1  2 ALA    32  VAL    34  0
SHEET    2 B1  2 LYS    48  GLU    50 -1  N  GLU    50   O  ALA    32
SHEET    1 B2  2 ALA    32  LEU    35  0
SHEET    2 B2  2 TRP   123  ASP   126 -1  N  ASP   126   O  ALA    32
SHEET    1 B3  2 LEU    47  PRO    51  0
SHEET    2 B3  2 VAL    62  PHE    66 -1  N  PHE    66   O  LEU    47
SHEET    1 B4  2 ASN    58  ASN    68  0
SHEET    2 B4  2 ASP    71  LEU    81 -1  N  LEU    81   O  ASN    58
SHEET    1 B5  2 TRP    77  ASP    82  0
SHEET    2 B5  2 LYS    85  LEU    90 -1  N  LEU    90   O  TRP    77
SHEET    1 B6  2 ALA    84  LEU    90  0
SHEET    2 B6  2 LEU    93  VAL    99 -1  N  VAL    99   O  ALA    84
SHEET    1 B7  2 ASN    96  VAL    99  0
SHEET    2 B7  2 ASP   111  GLU   114 -1  N  GLU   114   O  ASN    96
SHEET    1 B8  2 HIS   107  VAL   113  0
SHEET    2 B8  2 ASP   119  LEU   125 -1  N  LEU   125   O  HIS   107
SHEET    1 B9  2 ALA   179  VAL   181  0
SHEET    2 B9  2 LYS   195  GLU   197 -1  N  GLU   197   O  ALA   179
SHEET    1 B*  2 ALA   179  LEU   182  0
........
ENDMDL
REMARK time   20.00                                       ENERGY     1.96641E+03
HELIX    1 H1  GLU    131  SER    146  1                                      15
HELIX    2 H2  GLU    278  SER    293  1                                      15
HELIX    3 H3  GLU    426  SER    441  1                                      15
HELIX    4 H4  GLU    574  SER    589  1                                      15
SHEET    1 B1  2 ALA    32  VAL    34  0
SHEET    2 B1  2 LYS    48  GLU    50 -1  N  GLU    50   O  ALA    32
SHEET    1 B2  2 ALA    32  LEU    35  0
SHEET    2 B2  2 TRP   123  ASP   126 -1  N  ASP   126   O  ALA    32
SHEET    1 B3  2 LEU    47  PRO    51  0
SHEET    2 B3  2 VAL    62  PHE    66 -1  N  PHE    66   O  LEU    47
SHEET    1 B4  2 ASN    58  ASN    68  0
SHEET    2 B4  2 ASP    71  LEU    81 -1  N  LEU    81   O  ASN    58
SHEET    1 B5  2 TRP    77  ASP    82  0
SHEET    2 B5  2 LYS    85  LEU    90 -1  N  LEU    90   O  TRP    77
SHEET    1 B6  2 ALA    84  LEU    90  0
SHEET    2 B6  2 LEU    93  VAL    99 -1  N  VAL    99   O  ALA    84
SHEET    1 B7  2 ASN    96  VAL    99  0
SHEET    2 B7  2 ASP   111  GLU   114 -1  N  GLU   114   O  ASN    96
SHEET    1 B8  2 HIS   107  VAL   113  0
SHEET    2 B8  2 ASP   119  LEU   125 -1  N  LEU   125   O  HIS   107
SHEET    1 B9  2 ALA   179  VAL   181  0
SHEET    2 B9  2 LYS   195  GLU   197 -1  N  GLU   197   O  ALA   179
SHEET    1 B*  2 ALA   179  LEU   182  0
SHEET    2 B*  2 TRP   270  ASP   273 -1  N  ASP   273   O  ALA   179
SHEET    1 B*  2 LEU   194  GLY   196  0
SHEET    2 B*  2 MET   211  PHE   213 -1  N  PHE   213   O  LEU   194
SHEET    1 B*  2 ASN   205  ASN   215  0
SHEET    2 B*  2 ASP   218  LEU   228 -1  N  LEU   228   O  ASN   205
SHEET    1 B*  2 TRP   224  ASP   229  0
....................
ENDMDL
REMARK time  100.00                                       ENERGY     1.95395E+03
HELIX    1 H1  GLU    131  SER    146  1                                      15
HELIX    2 H2  GLU    278  SER    293  1                                      15
HELIX    3 H3  GLU    426  SER    441  1                                      15
HELIX    4 H4  GLU    574  SER    589  1                                      15
SHEET    1 B1  2 ALA    32  VAL    34  0
SHEET    2 B1  2 LYS    48  GLU    50 -1  N  GLU    50   O  ALA    32
SHEET    1 B2  2 ALA    32  LEU    35  0
SHEET    2 B2  2 TRP   123  ASP   126 -1  N  ASP   126   O  ALA    32
SHEET    1 B3  2 LEU    47  PRO    51  0
SHEET    2 B3  2 VAL    62  PHE    66 -1  N  PHE    66   O  LEU    47
SHEET    1 B4  2 ASN    58  ASN    68  0
SHEET    2 B4  2 ASP    71  LEU    81 -1  N  LEU    81   O  ASN    58
SHEET    1 B5  2 TRP    77  ASP    82  0
SHEET    2 B5  2 LYS    85  LEU    90 -1  N  LEU    90   O  TRP    77
SHEET    1 B6  2 ALA    84  LEU    90  0
.......

CONECT   1131   1133   1132
CONECT   1133   1135   1134
CONECT   1135   1137   1136
CONECT   1137   1139   1138
CONECT   1139   1141   1140
CONECT   1141   1143   1142
CONECT   1143   1145   1144
CONECT   1145   1146
ENDMDL

結局私はREMARK time 20.00次の情報を抽出したいと思います。

REMARK time   20.00                                       ENERGY     1.96641E+03
HELIX    1 H1  GLU    131  SER    146  1                                      15
HELIX    2 H2  GLU    278  SER    293  1                                      15
HELIX    3 H3  GLU    426  SER    441  1                                      15
HELIX    4 H4  GLU    574  SER    589  1                                      15
SHEET    1 B1  2 ALA    32  VAL    34  0
SHEET    2 B1  2 LYS    48  GLU    50 -1  N  GLU    50   O  ALA    32
SHEET    1 B2  2 ALA    32  LEU    35  0
SHEET    2 B2  2 TRP   123  ASP   126 -1  N  ASP   126   O  ALA    32
SHEET    1 B3  2 LEU    47  PRO    51  0
SHEET    2 B3  2 VAL    62  PHE    66 -1  N  PHE    66   O  LEU    47
SHEET    1 B4  2 ASN    58  ASN    68  0
SHEET    2 B4  2 ASP    71  LEU    81 -1  N  LEU    81   O  ASN    58
SHEET    1 B5  2 TRP    77  ASP    82  0
SHEET    2 B5  2 LYS    85  LEU    90 -1  N  LEU    90   O  TRP    77
SHEET    1 B6  2 ALA    84  LEU    90  0
SHEET    2 B6  2 LEU    93  VAL    99 -1  N  VAL    99   O  ALA    84
SHEET    1 B7  2 ASN    96  VAL    99  0
SHEET    2 B7  2 ASP   111  GLU   114 -1  N  GLU   114   O  ASN    96
SHEET    1 B8  2 HIS   107  VAL   113  0
SHEET    2 B8  2 ASP   119  LEU   125 -1  N  LEU   125   O  HIS   107
SHEET    1 B9  2 ALA   179  VAL   181  0
SHEET    2 B9  2 LYS   195  GLU   197 -1  N  GLU   197   O  ALA   179
SHEET    1 B*  2 ALA   179  LEU   182  0
SHEET    2 B*  2 TRP   270  ASP   273 -1  N  ASP   273   O  ALA   179
SHEET    1 B*  2 LEU   194  GLY   196  0
SHEET    2 B*  2 MET   211  PHE   213 -1  N  PHE   213   O  LEU   194
SHEET    1 B*  2 ASN   205  ASN   215  0
SHEET    2 B*  2 ASP   218  LEU   228 -1  N  LEU   228   O  ASN   205
SHEET    1 B*  2 TRP   224  ASP   229  0
SHEET    2 B*  2 LYS   232  LEU   237 -1  N  LEU   237   O  TRP   224
......
CONECT   1141   1143   1142
CONECT   1143   1145   1144
CONECT   1145   1146
ENDMDL

答え1

使用するコマンドはインライン編集用です。行範囲を抽出するには、範囲アドレス指定を使用できます/start_pattern/,/end pattern/

sed -n '/REMARK time *20\.00/,/ENDMDL/p' test.pdb

そのため、オプションを使用してデフォルトの出力を抑制し、次-nから次まですべてをp印刷します(次のものを含めるのではなく、欲しいと思います。REMARK time *20.00ENDMDLREMARK time

REMARKこれは、行でスペースの代わりにタブを使用する場合に機能します。最後ににエスケープする必要が/REMARK time[[:space:]]*20\.00/あります。それ以外の場合はすべての文字と一致します。.\..

答え2

ピリピはそれをあなたに与えました。素晴らしい sed 答えしかし、ここには他のアプローチがあります。およびを使用して、入力レコードレコードと出力レコード区切り変数(およびawkそれぞれ、通常は「行」を定義する文字と各呼び出しに追加される文字)を設定できます。これにより、各行間の全行ブロックが単一の「行」として扱われ、探しているパターンを含む行を印刷することがわかります。RSORS\nprintENDMDLENDMDLawk

awk 'BEGIN{ RS=ORS="ENDMDL\n"}/REMARK\s*time\s*20\.00/' foo.pdb 

ファイルでこれを実行すると、次のようになります。

$ awk 'BEGIN{ RS=ORS="ENDMDL\n"}/REMARK\s*time\s*20\.00/' foo.pdb 
REMARK time   20.00                                       ENERGY     1.96641E+03
HELIX    1 H1  GLU    131  SER    146  1                                      15
HELIX    2 H2  GLU    278  SER    293  1                                      15
HELIX    3 H3  GLU    426  SER    441  1                                      15
HELIX    4 H4  GLU    574  SER    589  1                                      15
SHEET    1 B1  2 ALA    32  VAL    34  0
SHEET    2 B1  2 LYS    48  GLU    50 -1  N  GLU    50   O  ALA    32
SHEET    1 B2  2 ALA    32  LEU    35  0
SHEET    2 B2  2 TRP   123  ASP   126 -1  N  ASP   126   O  ALA    32
SHEET    1 B3  2 LEU    47  PRO    51  0
SHEET    2 B3  2 VAL    62  PHE    66 -1  N  PHE    66   O  LEU    47
SHEET    1 B4  2 ASN    58  ASN    68  0
SHEET    2 B4  2 ASP    71  LEU    81 -1  N  LEU    81   O  ASN    58
SHEET    1 B5  2 TRP    77  ASP    82  0
SHEET    2 B5  2 LYS    85  LEU    90 -1  N  LEU    90   O  TRP    77
SHEET    1 B6  2 ALA    84  LEU    90  0
SHEET    2 B6  2 LEU    93  VAL    99 -1  N  VAL    99   O  ALA    84
SHEET    1 B7  2 ASN    96  VAL    99  0
SHEET    2 B7  2 ASP   111  GLU   114 -1  N  GLU   114   O  ASN    96
SHEET    1 B8  2 HIS   107  VAL   113  0
SHEET    2 B8  2 ASP   119  LEU   125 -1  N  LEU   125   O  HIS   107
SHEET    1 B9  2 ALA   179  VAL   181  0
SHEET    2 B9  2 LYS   195  GLU   197 -1  N  GLU   197   O  ALA   179
SHEET    1 B*  2 ALA   179  LEU   182  0
SHEET    2 B*  2 TRP   270  ASP   273 -1  N  ASP   273   O  ALA   179
SHEET    1 B*  2 LEU   194  GLY   196  0
SHEET    2 B*  2 MET   211  PHE   213 -1  N  PHE   213   O  LEU   194
SHEET    1 B*  2 ASN   205  ASN   215  0
SHEET    2 B*  2 ASP   218  LEU   228 -1  N  LEU   228   O  ASN   205
SHEET    1 B*  2 TRP   224  ASP   229  0
....................
ENDMDL

一部のawkバージョンではこれが好きではない可能性があるため、次のことを試す\sことができます。

awk 'BEGIN{ RS=ORS="ENDMDL\n"} $1=="REMARK" && $2=="time" && $3=="20.00"' foo.pdb 

関連情報