두 개의 서로 다른 열과 관련된 두 가지 조건을 기반으로 모든 행을 인쇄하는 방법은 무엇입니까?

두 개의 서로 다른 열과 관련된 두 가지 조건을 기반으로 모든 행을 인쇄하는 방법은 무엇입니까?

다음과 같은 데이터 세트가 있습니다.

ATOM     19  O   WAT     2      -5.435   5.542  -3.646  1.00  0.00           O
ATOM     20  H1  WAT     2      -4.824   5.163  -2.982  1.00  0.00           H
ATOM     21  H2  WAT     2      -5.318   6.499  -3.469  1.00  0.00           H
TER
ATOM     22  O   WAT     3       5.959   0.828   3.228  1.00  0.00           O
ATOM     23  H1  WAT     3       5.425   1.196   2.482  1.00  0.00           H
ATOM     24  H2  WAT     3       6.711   1.472   3.201  1.00  0.00           H
TER
ATOM     25  O   WAT     4      -1.704  -4.348  -2.017  1.00  0.00           O
ATOM     26  H1  WAT     4      -1.895  -3.911  -1.145  1.00  0.00           H
ATOM     27  H2  WAT     4      -1.980  -5.267  -1.782  1.00  0.00           H
TER
ATOM     28  O   WAT     5      -3.222  -3.303   5.524  1.00  0.00           O
ATOM     29  H1  WAT     5      -2.934  -3.466   4.594  1.00  0.00           H
ATOM     30  H2  WAT     5      -3.063  -2.335   5.580  1.00  0.00           H
TER
ATOM     31  O   WAT     6       5.528  -4.121  -0.508  1.00  0.00           O
ATOM     32  H1  WAT     6       6.456  -3.823  -0.552  1.00  0.00           H
ATOM     33  H2  WAT     6       5.492  -4.428   0.428  1.00  0.00           H
TER
ATOM     34  O   WAT     7       4.329   2.267   1.528  1.00  0.00           O
ATOM     35  H1  WAT     7       4.574   2.208   0.572  1.00  0.00           H
ATOM     36  H2  WAT     7       4.370   3.237   1.645  1.00  0.00           H
TER
ATOM     37  O   WAT     8      -6.042  -5.320  -1.141  1.00  0.00           O
ATOM     38  H1  WAT     8      -6.693  -4.716  -0.701  1.00  0.00           H
ATOM     39  H2  WAT     8      -5.277  -5.191  -0.531  1.00  0.00           H

열 3의 문자열이 =O인지 확인하고 열 8의 값이 >0.0인지 확인하고 싶습니다. 이 경우 이 내용과 다음 세 줄을 인쇄해야 합니다.

하나의 조건에 맞는 행을 인쇄할 수 있지만 모든 조건을 함께 연결할 수는 없습니다.

cat <inputfile>| awk '$8>0'

출력은 다음과 같습니다

ATOM     22  O   WAT     3       5.959   0.828   3.228  1.00  0.00           O
ATOM     23  H1  WAT     3       5.425   1.196   2.482  1.00  0.00           H
ATOM     24  H2  WAT     3       6.711   1.472   3.201  1.00  0.00           H
TER
ATOM     28  O   WAT     5      -3.222  -3.303   5.524  1.00  0.00           O
ATOM     29  H1  WAT     5      -2.934  -3.466   4.594  1.00  0.00           H
ATOM     30  H2  WAT     5      -3.063  -2.335   5.580  1.00  0.00           H
TER
ATOM     34  O   WAT     7       4.329   2.267   1.528  1.00  0.00           O
ATOM     35  H1  WAT     7       4.574   2.208   0.572  1.00  0.00           H
ATOM     36  H2  WAT     7       4.370   3.237   1.645  1.00  0.00           H

답변1

"삭제"가 아니라 "이 줄 인쇄"를 의미한다고 생각합니다. 열 3에 0이 포함되어 있고 O열 8이 0보다 큰 경우 카운터를 설정할 수 있습니다. 카운터가 0보다 크면 행을 인쇄하고 카운터를 감소시킵니다.

$ awk '$3=="O" && $8>0{ p=4 } p-->0' file
ATOM     22  O   WAT     3       5.959   0.828   3.228  1.00  0.00           O
ATOM     23  H1  WAT     3       5.425   1.196   2.482  1.00  0.00           H
ATOM     24  H2  WAT     3       6.711   1.472   3.201  1.00  0.00           H
TER
ATOM     28  O   WAT     5      -3.222  -3.303   5.524  1.00  0.00           O
ATOM     29  H1  WAT     5      -2.934  -3.466   4.594  1.00  0.00           H
ATOM     30  H2  WAT     5      -3.063  -2.335   5.580  1.00  0.00           H
TER
ATOM     34  O   WAT     7       4.329   2.267   1.528  1.00  0.00           O
ATOM     35  H1  WAT     7       4.574   2.208   0.572  1.00  0.00           H
ATOM     36  H2  WAT     7       4.370   3.237   1.645  1.00  0.00           H
TER

답변2

awk '$3 == "O" && $8 > 0.0{x=NR+3}(NR<=x){print }' file

산출

ATOM     22  O   WAT     3       5.959   0.828   3.228  1.00  0.00           O
ATOM     23  H1  WAT     3       5.425   1.196   2.482  1.00  0.00           H
ATOM     24  H2  WAT     3       6.711   1.472   3.201  1.00  0.00           H
TER
ATOM     28  O   WAT     5      -3.222  -3.303   5.524  1.00  0.00           O
ATOM     29  H1  WAT     5      -2.934  -3.466   4.594  1.00  0.00           H
ATOM     30  H2  WAT     5      -3.063  -2.335   5.580  1.00  0.00           H
TER
ATOM     34  O   WAT     7       4.329   2.267   1.528  1.00  0.00           O
ATOM     35  H1  WAT     7       4.574   2.208   0.572  1.00  0.00           H
ATOM     36  H2  WAT     7       4.370   3.237   1.645  1.00  0.00           H
TE

오른쪽

관련 정보