줄 문자에 따라 옆에 해당 숫자를 인쇄합니다.

줄 문자에 따라 옆에 해당 숫자를 인쇄합니다.

다음과 같은 입력 형식이 있습니다.

H
O
C
H
H
C
H
H
O
C
H
H
C

다음과 같은 출력을 얻고 싶습니다.

H1
O1
C1
H2
H3
C2
H4
H5
O2
C3
H6
H7
C4

답변1

awk아래와 같은 간단한 명령을 사용할 수 있습니다 . 아래에서는 파일에서 해당 단어의 발생 횟수를 표시하는 값을 현재 줄에 추가하여 {..}1전체 줄을 간단하게 재구성 합니다.$0

awk '{ $0 = $0 "" ++unique[$0] }1' file

이 부분은 값을 키로 사용 unique[$0]하여 해시 맵을 생성합니다 . 사전 증가는 배열의 값을 로 증가 시킵니다 . 각 행을 명시적으로 다시 생성하는 대신 각 행의 끝에 카운터를 추가할 수도 있습니다.$0unique['H'], unique['O']unique['H']=1unique['H']=2

awk '{ print($0 "" ++unique[$0]) }' file

동일한 논리를 사용하는 동등한 Perl 버전

perl -lpe '{ $_ .= ++$unique{$_} }' file

후자는 문자가 각각 별도의 줄에 있지 않은 상황에 쉽게 적용할 수 있습니다. 예를 들면 다음과 같습니다.

$ echo ABBC | perl -lpe 's/./$& . ++$unique{$&}/ge'
A1B1B2C1

관련 정보