![pdb 파일에서 패턴 일치 전후의 모든 것을 제거하는 방법은 무엇입니까?](https://linux55.com/image/209524/pdb%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%ED%8C%A8%ED%84%B4%20%EC%9D%BC%EC%B9%98%20%EC%A0%84%ED%9B%84%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%EA%B2%83%EC%9D%84%20%EC%A0%9C%EA%B1%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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