我想编辑如下文件。
文件结构,3列

 1. 1 xy1 0
 2. 1 xy2 0
 3. 1 xy3 0.04
 4. 1 xy4 0.05
 5. 1 xy5 0.33
 6. 1 xy6 0.33
 7. 1 xy7 0.33

如果第3列中的某个值出现两次甚至几次(如第1行和第2行中的“0”,第5、6和7行中的“0.33”),我想编辑重复的值。每次出现值时,我都想将重复值增加0.001。看起来是这样的:
 1. 1 xy1 0
 2. 1 xy2 0.001
 3. 1 xy3 0.04
 4. 1 xy4 0.05
 5. 1 xy5 0.33
 6. 1 xy6 0.331
 7. 1 xy7 0.332

第2、6和7行的值增加了0.001。
如何使用awk/bash或R来执行此操作?
我可以用“cut-f 3 file | sort | uniq-d”来识别重复项,但是如果列表中已经出现了值,我如何编辑它?
我很感激你的每一个暗示,提前谢谢你!

最佳答案

$ awk '{$3+=(c[$3]++/1000)}1' file
1 xy1 0
1 xy2 0.001
1 xy3 0.04
1 xy4 0.05
1 xy5 0.33
1 xy6 0.331
1 xy7 0.332

关于r - 使用awk或R编辑文件,如果重复则更改值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39252449/

10-13 07:27