2つの異なる列に関連する2つの条件に基づいてすべての行を印刷する方法は?

2つの異なる列に関連する2つの条件に基づいてすべての行を印刷する方法は?

次のデータセットがあります。

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であることを確認したいと思います。この場合、この内容と次の3行を印刷する必要があります。

1つの条件に合う行を印刷できますが、すべての条件を一緒にリンクすることはできません。

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

おすすめ記事