我有以下输入格式,
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