
다음과 같은 데이터 세트가 있습니다.
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
오른쪽