perl应用:SNP的提取(3):18个样品SNP的合并join.pl,+忽略-多
| 
                         在(2)中我们只是取出了一个sample的snp位点,我们的想法是把所有的SNP位点统计到一个文本里面,这样,我们就可以看出哪些SNP位点的出现的频率更大。也就是哪些是真正的SNP位点,只出现在一个样品中的SNP位点,有可能是因为测序不准,导致的假阳性。 思路如下: 1.先打开第一个样品的snp位点,然后将snp在ref的位置和碱基作为hash的key,然后把样品的碱基作为value。 2.先打开第二个样品的snp位点,然后与我们得到的hash进行查找,如果有这个位点,那么就加上第二个样品的碱基。如果不存在,就把这个新的位点加入到hash中 3.打开第三个样品的snp位点,然后我们得到。。。。。。。。。。。。。。 4打开第四个样品的。。。。。。。。。。。 5打开第五个。。。。。。 6打开。。 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 一直把18个样品都处理完,然后把得到的结果进行输出就ok了。 程序如下: #!usr/bin/perl
use strict;
use warnings;
my @information1;
my @information2;
my %position;
my $key1;
my $key2;
my $key3;
my $value;
my @samples;
my $sample;
@samples=qw/sample1 sample2 sample3 sample4 sample5 sample6 sample7 sample8 sample9 sample10 sample11 sample12 sample13 sample14 sample15 sample16 sample17 sample18/;
open (JOIN,">>Chr5_join.txt")||die("can not open!");#这里是要替换的,输出到不同的染色体中
print JOIN "pos TAIR bur can ct edi hi kn ler mt no oy po rsch sf tsu wil ws wu zu n";
open (SNP1,"snpTAIR_vs_bur.txt")||die("can not open!");#这里打开的文件要检查一下,因为后面有变成snp_TAIR_vs_bur.maf.txt
while (<SNP1>)
{
	chomp;
	@information1=split;
	$position{$information1[0]}{$information1[1]}{sample1}=$information1[3];
}
close SNP1;
open (SNP2,"snpTAIR_vs_can.txt")||die("can not open!");
while(<SNP2>)#{{{
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample2}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample2}=$information2[3];
	}
	
}#}}}
close SNP2;
open (SNP3,"snpTAIR_vs_ct.txt")||die("can not open!");
while(<SNP3>)#{{{
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample3}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample3}=$information2[3];
	}
	
}#}}}
close SNP3;
open (SNP4,"snpTAIR_vs_edi.txt")||die("can not open!");
while(<SNP4>)#{{{
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample4}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample4}=$information2[3];
	}
	
}#}}}
close SNP4;
open (SNP5,"snpTAIR_vs_hi.txt")||die("can not open!");
while(<SNP5>)#{{{
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample5}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample5}=$information2[3];
	}
	
}#}}}
close SNP5;
open (SNP6,"snpTAIR_vs_kn.txt")||die("can not open!");
while(<SNP6>)#{{{
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample6}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample6}=$information2[3];
	}
	
}#}}}
close SNP6;
open (SNP7,"snpTAIR_vs_ler.txt")||die("can not open!");
while(<SNP7>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample7}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample7}=$information2[3];
	}
	
}
close SNP7;
open (SNP8,"snpTAIR_vs_mt.txt")||die("can not open!");
while(<SNP8>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample8}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample8}=$information2[3];
	}
	
}
close SNP8;
open (SNP9,"snpTAIR_vs_no.txt")||die("can not open!");
while(<SNP9>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample9}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample9}=$information2[3];
	}
	
}
close SNP9;
open (SNP10,"snpTAIR_vs_oy.txt")||die("can not open!");
while(<SNP10>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample10}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample10}=$information2[3];
	}
	
}
close SNP10;
open (SNP11,"snpTAIR_vs_po.txt")||die("can not open!");
while(<SNP11>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample11}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample11}=$information2[3];
	}
	
}
close SNP11;
open (SNP12,"snpTAIR_vs_rsch.txt")||die("can not open!");
while(<SNP12>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample12}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample12}=$information2[3];
	}
	
}
close SNP12;
open (SNP13,"snpTAIR_vs_sf.txt")||die("can not open!");
while(<SNP13>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample13}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample13}=$information2[3];
	}
	
}
close SNP13;
open (SNP14,"snpTAIR_vs_tsu.txt")||die("can not open!");
while(<SNP14>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample14}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample14}=$information2[3];
	}
	
}
close SNP14;
open (SNP15,"snpTAIR_vs_wil.txt")||die("can not open!");
while(<SNP15>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample15}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample15}=$information2[3];
	}
	
}
close SNP15;
open (SNP16,"snpTAIR_vs_ws.txt")||die("can not open!");
while(<SNP16>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample16}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample16}=$information2[3];
	}
	
}
close SNP16;
open (SNP17,"snpTAIR_vs_wu.txt")||die("can not open!");
while(<SNP17>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample17}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample17}=$information2[3];
	}
	
}
close SNP17;
open (SNP18,"snpTAIR_vs_zu.txt")||die("can not open!");
while(<SNP18>)
{
	chomp;
	@information2=split;
	if ($position{$information2[0]}{$information2[1]})
	{
		$position{$information2[0]}{$information2[1]}{sample18}=$information2[3];
	}
	else
	{
		$position{$information2[0]}{$information2[1]}{sample18}=$information2[3];
	}
	
}
close SNP18;
foreach  $key1(sort keys %position)              #遍历输出
{
	foreach  $key2(sort keys %{$position{$key1}})
	{
		print JOIN "$key1 $key2";
		foreach $sample(@samples)
			{
				if (exists $position{$key1}{$key2}{$sample})
				{
			        $value=$position{$key1}{$key2}{$sample};
			        print JOIN " $value"; 
				}
				else
				{
					print JOIN " -"
				}
			}
	}
	print JOIN "n";
}
 
得到的结果如下: pos TAIR bur can ct edi hi kn ler mt no oy po rsch sf tsu wil ws wu zu 1000 G - A - - - - - - - - - - - - - - - - 10000003 C - - - - - G - - - - - - - - - - - - 10000013 A - - R - - - - - - - - - - - - - - - 10000021 G - - - - - - - - - - - C - - - - - - 10000034 C - - - - - - - - - - - - - - - - Y - 10000047 G R - - - - - - - - - - - - - - - R - 10000049 A R - - - - - - - - - - - - - - - R - 10000067 C Y - - - - - - - - - - - - - - - Y - 10000087 G - - R - - - - - - - - - - - - - - - 10000098 A - - S - - G - - - - - - - - G - G G 10000118 G R - R - - - - - - - - A - - R - R - 10000121 G - - - - - - - - - - - - - - R - R - 10000139 C Y - - - - - - - - - - T - - Y - Y - 10000157 A R - - - - - - - - - - - - - R - R - 10000170 G - - - - - - - - - - - - - - - - A - 10000176 C - - - - - - - - - - - - - - - - A - 10000177 T Y - - - - - - - - - - - - - - - C - 10000183 C - - - - - - - - - - - - A - - - - - 10000188 A - - - - - - - - - - - - C - - - - - 10000192 T - - - - - - - - - - - - A - - - - - 10000194 C Y - Y - - - - - - - - - T - - - - - 10000195 G - - - - - - - - - - - - C - - - - - 10000196 A - - - - - - - - - - - - G - - - - - 10000197 T - - - - - - - - - - - - A - - - - - 10000201 C - - - - - - - - - - - - T - - - - - 10000205 T - - - - - - - - - - - - C - - - - - 10000207 C - - Y - - - - - - - - - T - - - - - 我们可以对每一行进行读取,然后对-进行计数,如果-多余一定的量,那么就把这一行删除。程序如下: #!/usr/bin/perl
use strict;
use warnings;
my @datas;
my $data;
my $numb=0;
my $output;
open (SNP,"Chr1_join.txt")||die("can not open !");
open (MORE,">3_more_snp.txt")||die("can not open!");
while(<SNP>)
{
	$output=$_;
	@datas=split;
	foreach $data(@datas) 
	{
		if ($data=~"-")
		{
			$numb++;
		}
		else
		{
			next;
		}
	}
	if ($numb<15)
	{
		$numb=0;
		print MORE "$outputn";
	}
	else
	{
		$numb=0;
	}
}
        (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
