다음과 같은 입력 형식이 있습니다.
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]
하여 해시 맵을 생성합니다 . 사전 증가는 배열의 값을 로 증가 시킵니다 . 각 행을 명시적으로 다시 생성하는 대신 각 행의 끝에 카운터를 추가할 수도 있습니다.$0
unique['H'], unique['O']
unique['H']=1
unique['H']=2
awk '{ print($0 "" ++unique[$0]) }' file
동일한 논리를 사용하는 동등한 Perl 버전
perl -lpe '{ $_ .= ++$unique{$_} }' file
후자는 문자가 각각 별도의 줄에 있지 않은 상황에 쉽게 적용할 수 있습니다. 예를 들면 다음과 같습니다.
$ echo ABBC | perl -lpe 's/./$& . ++$unique{$&}/ge'
A1B1B2C1