Unix编程以每1Mb生成一个子集并命名该子集
我需要一种在Unix中对大型数据集进行子集的方法。我有>50K的单核苷酸多态性,每个都有它们解释的遗传变异和一个位置(染色体和位置)。我需要为每个染色体每一百万个碱基对(位置)对SNP进行子集划分,以创建我们称之为1Mb的窗口。我还需要命名这些窗口,例如CHR:WINDOW 我的数据结构如下:Unix编程以每1Mb生成一个子集并命名该子集,unix,Unix,我需要一种在Unix中对大型数据集进行子集的方法。我有>50K的单核苷酸多态性,每个都有它们解释的遗传变异和一个位置(染色体和位置)。我需要为每个染色体每一百万个碱基对(位置)对SNP进行子集划分,以创建我们称之为1Mb的窗口。我还需要命名这些窗口,例如CHR:WINDOW 我的数据结构如下: SNP CHR POS GenVar BTB-00074935 1 157284336 2.306141e-06 BTB-01512420 8 72495155 1.958865e-06 Hapmap3
SNP CHR POS GenVar
BTB-00074935 1 157284336 2.306141e-06
BTB-01512420 8 72495155 1.958865e-06
Hapmap35555-SCAFFOLD20017_21254 18 29600313 1.876211e-06
BTB-01098205 3 68702409 1.222881e-06
ARS-BFGL-NGS-115531 11 74038177 9.597669e-07
ARS-BFGL-NGS-25658 2 119059379 7.953552e-07
BTB-00411452 20 47919708 6.827312e-07
ARS-BFGL-NGS-100532 18 63878550 6.115242e-07
Hapmap60823-rs29019235 1 10717144 5.400144e-07
ARS-BFGL-NGS-42256 10 50282066 4.864838e-07
.
.
.
基本的第一次尝试,假设任何第一个字段(SNP)中没有空格,并且“key”是(col2,col3的第一(长度-6)位): 这会打印到名为
CHR03:WINDOW456
的文件中。如果您只需要类似于03:456
的文件名,请编辑掉上面的CHR
和窗口
另外请注意,后续运行只会继续扩展现有文件,因此在运行之间可能需要一个rm*:*
。我是否理解正确,将记录分组到文件中的关键是(col2,col3的第一个长度-6位)?如果位置为1-1000000,则分组的第二部分需要是;1,000,0001-2,000,000; 2000001-3000000等等。我在下面给出的答案是0-9999999组(as 000),1000000-1999999组(as 001),等等。如果您需要此注释中指定的分组,请将下面的$3更改为$3-1。
awk '{w=0+substr($3,1,length($3)-6); print >>sprintf("CHR%02d:WINDOW%03d",$2,w)}'