簡體   English   中英

Linux文本:在模式的上一行添加行

[英]Linux text: add line to previous line of a pattern

我想在幾個變量文本文件中添加一個特定的行“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命令中找到了一些例子但是我不知道如何添加到前一行。

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 ,則它打印TER last_c5=$5所有行都被打印出來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM