我有一个排序的 ID 和数字(位置)文件。我需要将第二列中的位置分组为一组 500 的间隔。
如果该行的值与上一行相比小于500,则将它们分组到同一组中;而如果该行的值超过 500,则将它们分组到不同的组中。
输入文件:
snp00001 200
snp00002 300
snp00003 400
snp00004 500
snp00005 600
snp00006 900
snp00007 1500
snp00008 1800
snp00009 3000
snp00010 3500
snp00011 4000
snp00012 5000
期望的输出
snp00001 200 Group1
snp00002 300 Group1
snp00003 400 Group1
snp00004 500 Group1
snp00005 600 Group1
snp00006 900 Group1
snp00007 1500 Group2
snp00008 1800 Group2
snp00009 3000 Group3
snp00010 3500 Group3
snp00011 4000 Group4
snp00012 5000 Group5
额外说明:snp00001 到 snp00006 将被归入同一组,因为它们之间的范围 (snp00002 - snp00001) 或 (snp00003 - snp00002) 或 (snp00004 - snp00003) ... 小于 500。
snp00006 和 snp00007 被分到下一组,因为它们之间的范围(snp00007 - snp00006)超过 500。
我试过用awk,但没有成功。
awk -v step=500 -v OFS='\t' '{if(NR==1 || $2+limit){group++} file="Group"group; print file,$0}' input_file