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.00
ENDMDL
REMARK time
REMARK
これは、行でスペースの代わりにタブを使用する場合に機能します。最後ににエスケープする必要が/REMARK time[[:space:]]*20\.00/
あります。それ以外の場合はすべての文字と一致します。.
\.
.
答え2
ピリピはそれをあなたに与えました。素晴らしい sed 答えしかし、ここには他のアプローチがあります。およびを使用して、入力レコードレコードと出力レコード区切り変数(およびawk
それぞれ、通常は「行」を定義する文字と各呼び出しに追加される文字)を設定できます。これにより、各行間の全行ブロックが単一の「行」として扱われ、探しているパターンを含む行を印刷することがわかります。RS
ORS
\n
print
ENDMDL
ENDMDL
awk
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