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。