Text-Processing
根據定義的距離將 SNP 分組為基因座
我有一個排序的 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