Text-Processing

根據定義的距離將 SNP 分組為基因座

  • April 15, 2022

我有一個排序的 ID 和數字(位置)文件。我需要將第二列中的位置分組為 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 Group2
snp00007    1500    Group3
snp00008    1800    Group3
snp00009    3000    Group4
snp00010    3500    Group4
snp00011    4000    Group5
snp00012    5000    Group6

然後將這些組保存到不同的文件中,分別重命名為Group1、和。Group2``Group3``Group4

我已經嘗試bedtools了一些其他命令,但問題無法解決。

任何幫助將不勝感激。

謝謝!

這是一個完美的工作awk

$ awk -v step=500 -v OFS='\t' \
'{ 
   if(NR==1 || $2>limit){
       limit=$2+step
       group++
   } 
   file="Group"group; print $0,file 
}' input_file 
snp00001    200 Group1
snp00002    300 Group1
snp00003    400 Group1
snp00004    500 Group1
snp00005    600 Group1
snp00006    900 Group2
snp00007    1500    Group3
snp00008    1800    Group3
snp00009    3000    Group4
snp00010    3500    Group4
snp00011    4000    Group5
snp00012    5000    Group6

要列印到單獨的文件中,請執行以下操作:

awk -v step=500 -v OFS='\t' \
'{ 
   if(NR==1 || $2>limit){
       limit=$2+step
       group++
   } 
   file="Group"group; print $0,file > file
}' input_file 

這將Group1通過Group5您的範例數據生成文件,格式如下:

$ cat Group1 
snp00001    200 Group1
snp00002    300 Group1
snp00003    400 Group1
snp00004    500 Group1
snp00005    600 Group1

$ cat Group6
snp00012    5000    Group6

引用自:https://unix.stackexchange.com/questions/698728