增加文件中的重复项

增加文件中的重复项

我有一个这样的文件:

20001 
17001
17001
53001
90001 
90001
90001

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

20001 
17001
17002
53001
90001 
90002
90003

答案1

awk '{$1+=seen[$1]++} 1' file

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

当值靠近时,上面的代码会产生重​​复的数字,例如序列 2,2,3 – 输出为 2,3,3。可以使用循环来实现 2,3,4:

awk '{while (c[$1]) {$1 += c[$1] += c[$1+c[$1]]} c[$1]++} 1'

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

答案2

一个变体@客人的回答只要之前已经输出过,就通过增加数字来防止输出重复:

awk '{while ($1 in c) $1 += c[$1]++; c[$1]++; print}' file

或与 中相同perl,处理输入中任意位置的数字:

perl -pe 's{\d+}{
            $i = $&;
            while (defined($c{$i})) {$i += $c{$i}++}
            $c{$i}++;
            $i
          }ge' file

在这样的输入上:

1
1
1
5
5
10
10
1
1
1

他们给:

1
2
3
5
6
10
11
4
7
8

相关内容