增加文件中的重复项

Dja*_*sef 5 awk text-processing

我有一个这样的文件:

20001 
17001
17001
53001
90001 
90001
90001
Run Code Online (Sandbox Code Playgroud)

当 $1 是重复条目时,我试图通过向它添加一个来修改 $1,因此输出将如下所示:

20001 
17001
17002
53001
90001 
90002
90003
Run Code Online (Sandbox Code Playgroud)

gue*_*est 10

awk '{$1+=seen[$1]++} 1' file
Run Code Online (Sandbox Code Playgroud)

打印前将后递增的哈希值添加到 $1 的当前值。

当值接近时,上面将产生重复的数字,例如序列 2,2,3 – 输出是 2,3,3。可以使用循环来生成 2,3,4:

awk '{while (c[$1]) {$1 += c[$1] += c[$1+c[$1]]} c[$1]++} 1'
Run Code Online (Sandbox Code Playgroud)

数组c存储 $1 增加的偏移量(如seen第一个示例)。不是仅通过该唯一值的偏移量增加 $1,它还增加了下一个值的偏移量,直到达到新的先前未见过的 $1。

  • 比我的好多了(现已删除)。或者处理输入中的任何数字:`perl -pe 's/\d+/$& + $seen{$&}++/ge' file` (3认同)