如何顺序编号复制行?
问题描述:
我想顺序编号重复行。可能使用awk,但任何unix代码都可以。比如我想如何顺序编号复制行?
3J8934
4Y9384
3T2938
3J8934
4Y9384
7I5938
成为
3J8934_01
4Y9384_01
3T2938_01
3J8934_02
4Y9384_02
7I5938_01
到目前为止,我已经能够用awk与_02
标记重复的,但它不与_01
标志着第一个或不重复。
awk 'cnt[$0]++{$0=$0"_0"cnt[$0]}1' filename.txt
答
你非常接近。这是我会怎么做:
$ awk '{ $0 = $0 sprintf("_%02d", ++count[$0]) } 1' infile
3J8934_01
4Y9384_01
3T2938_01
3J8934_02
4Y9384_02
7I5938_01
对于每一行,我们追加sprintf("_%02d", ++count[$0])
,即和下划线后跟一个数字,填零到两位数(如果适用)。该号码的值是++count[$0]
:这是我们已经看到该线路的次数。
count
是一个由整行索引的关联数组;它是预先递增的的++
,即先递增,然后打印。当我们第一次看到一条线时,计数器被隐含地初始化为零,递增,并且我们追加_01
,依此类推。
1
最后是{ print $0 }
的缩写,因为这是任何真实条件的默认操作。
你能解释代码的工作原理吗? – dood
@dood添加了解释。 –
谢谢SOOO了。这工作完美:) –