0

我想在几个可变文本文件中添加一个特定的行“TER”:

输入:

[...]
ATOM   4149  C   LEU C   9     136.820 120.050  53.540  1.00  0.00
ATOM   4150  O   LEU C   9     136.600 118.860  53.240  1.00  0.00
ATOM   4151  O   LEU C   9     137.310 120.340  54.650  1.00  0.00
ATOM   4154  N   LYS D   2     115.050 134.940  61.060  1.00  0.00
ATOM   4155  H1  LYS D   2     115.660 134.160  61.180  1.00  0.00
ATOM   4156  H2  LYS D   2     114.760 135.000  60.100  1.00  0.00
[...]

输出:

[...]
ATOM   4149  C   LEU C   9     136.820 120.050  53.540  1.00  0.00
ATOM   4150  O   LEU C   9     136.600 118.860  53.240  1.00  0.00
ATOM   4151  O   LEU C   9     137.310 120.340  54.650  1.00  0.00
TER
ATOM   4154  N   LYS D   2     115.050 134.940  61.060  1.00  0.00
ATOM   4155  H1  LYS D   2     115.660 134.160  61.180  1.00  0.00
ATOM   4156  H2  LYS D   2     114.760 135.000  60.100  1.00  0.00
[...]

所以模式是:如果在“C”之后第一次发现“D”,则在“D”行之前(“C”行之后)添加一个“TER”。所有其他数字和字符都可以是可变的。

我发现了一些使用 sed 命令的示例,但是我不知道如何添加到上一行。

4

1 回答 1

2

awk

$ awk 'last_c5=="C" && $5=="D" {print "TER"}; last_c5=$5' file
ATOM   4149  C   LEU C   9     136.820 120.050  53.540  1.00  0.00
ATOM   4150  O   LEU C   9     136.600 118.860  53.240  1.00  0.00
ATOM   4151  O   LEU C   9     137.310 120.340  54.650  1.00  0.00
TER
ATOM   4154  N   LYS D   2     115.050 134.940  61.060  1.00  0.00
ATOM   4155  H1  LYS D   2     115.660 134.160  61.180  1.00  0.00
ATOM   4156  H2  LYS D   2     114.760 135.000  60.100  1.00  0.00

它不断跟踪最后的第 5 列值,并将其存储在last_c5变量中。如果前一个是C并且当前是D,它会打印TERlast_c5=$5正在打印所有行。

于 2013-11-04T11:50:26.927 回答