如果在下面的行中重复则替换字符

如果在下面的行中重复则替换字符

我有以下顺序,

N
H
CB
CB
CG1
CG2
C
O
N
H
CB
CB
CG
CD
.
.
.

当下面的行中重复“CB”时,我想用“CA”替换第一个“CB”,以便最终得到以下序列

N
H
CA
CB
CG1
CG2
C
O
N
H
CA
CB
CG
CD
.
.
.

答案1

如果您可以向后阅读文件,那么这种事情就更容易理解。幸运的是,tac(这是cat倒退的,因为这就是它的作用)可以让我们做到这一点。然后,当我们看到“CB”时,我们可以记下它,如果我们在下一行(以前是上一行)上看到“CB”,请对其进行编辑;然后再次使用以下命令将其从后向前翻转tac

$ tac input | awk '/CB/ && found==1 { $1="CA"; found=0 } /CB/ && found==0 { found=1 } ! /CB/ && found==1 { found=0 } {print}' | tac
N
H
CA
CB
CG1
CG2
C
O
N
H
CA
CB
CG
CD

相关内容