我需要一种在Unix中子集大型数据集的方法。我有> 50K的SNP,每一个都有他们解释的遗传变异和一个位置(染色体和位置)。我需要每个染色体每100万个碱基对(位置)对SNP进行子集,以创建我们所谓的1Mb窗口。我还需要命名这些窗口,例如CHR:WINDOW。
我的数据结构如下:
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
.
.
.发布于 2015-10-15 15:41:14
一个基本的第一次尝试,假设在第一个字段中没有空格,并且“键”是(col2,第一个(长度-6)数字的col3):
awk '{w=0+substr($3,1,length($3)-6); print >>sprintf("CHR%02d:WINDOW%03d",$2,w)}'这将打印到名为CHR03:WINDOW456的文件。如果您只想要像03:456这样的文件名,那么编辑上面的CHR和WINDOW。
还要注意的是,后续的运行只会不断地扩展现有的文件,因此在运行之间可能需要一个rm *:*。
https://stackoverflow.com/questions/33152161
复制相似问题