我有以下一组数据,
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 列包含O
且第 8 列大于 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
右