次の入力形式があります。
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