根据行字符,在其旁边打印相应的数字

根据行字符,在其旁边打印相应的数字

我有以下输入格式,

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']=1unique['H']=2依此类推。我们还可以将计数器附加到每行的末尾,而不是显式地重新创建每行

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

等效的 Perl 版本,具有相同的逻辑

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

后一种可以很容易地适应字符不是每个都在单独的行上的情况,例如:

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

相关内容