아래 줄에서 반복되는 경우 문자를 바꿉니다.

아래 줄에서 반복되는 경우 문자를 바꿉니다.

나는 다음과 같은 순서를 가지고 있습니다.

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

아래 줄에서 "CB"가 반복되는 경우 첫 번째 "CB"를 "CA"로 바꾸어 다음 시퀀스로 끝나도록 하고 싶습니다.

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

관련 정보