- 论坛徽章:
- 0
|
本帖最后由 hztj2005 于 2016-04-03 10:57 编辑
- #!/usr/bin/perl
-
- open($score_f, "score.txt");#打开文件
- open($fasta_f, "Nucleotide.txt");#打开Nucleotide文件
- open(Out, ">Nucleotidenew.txt");#输出结果文件
- #读入score.txt
- @Scores={};
- while (<$score_f>){
- chomp;
- #print $_;
- if($_){
- $n++;
- push @Scores,$_;
-
- }
- }
-
- @Scorestemp = splice (@Scores,1,203); #删除第一个原因不明的非法元素。
- @Scores=@Scorestemp;
- $Scorenum=@Scores;
- print Out ("$Scorenum\n");
-
- #print Out ("@Scores\n");
-
- #读取Nucleotide.txt
- my $fastaall="";
- my $fastatemp="";
- while (<$fasta_f>){
- chomp;
- $fastatemp = $fastaall.$_;
- $fastaall= $fastatemp ;
- #print Out $fastaall."\n";
-
- }
- $fastaall =~ s/\s//g;#删除不当空白
- $fastaall =~ s/(([-A-Z]){3})/$1 /g;#给每个位点添加一个空白
- @Datafasta=split(/ /,$fastaall);#按空白切分
- #检查读入数据分组是否正确
- $Datafastanum=@Datafasta;
- print Out "\r\n";
- print Out ("Datafastanu:$Datafastanum\r\n");
- $n=1;
- foreach $item (@Datafasta) {
- print Out ("$n:$item\r\n");
- $n++;
- }
- #提取Score值大于5的位置对应的碱基
- @Datanew ={};
- for ($i = 0; $i <= @Datafasta; $i++) {
- if($Scores[$i] >= 5)
- {
- #print $Datafasta[$i]."\n";
- push @Datanew, $Datafasta[$i];
-
- }
- }
- @Datanewtemp = splice (@Datanew,1,203); #删除第一个原因不明的非法元素。
- @Datanew=@Datanewtemp;
- #分组结果
- print Out ("@Datanew\n");
- #最终结果
- $result=join("",@Datanew);
- print Out "$result\n";
- exit;
- #打印最终结果个数:
- $Datanewnum=@Datanew;
- print Out ("$Datanewnum\n");
-
- exit;
- ---------------------------------------------
- 对perl不熟悉,上面代码写得不好,改一改:
- #!/usr/bin/perl
-
- open($score_f, "score.txt");#打开文件
- open($fasta_f, "Nucleotide.txt");#打开Nucleotide文件
- open(Out, ">Nucleotidenew.txt");#输出结果文件
- #读入score.txt 并删除多余的空格
- my @Scores = map {chomp;s/^ +//;$_} <$score_f>;
-
- #读取Nucleotide.txt
- my $fastaall="";
- while (<$fasta_f>){
- chomp;
- $fastaall = $fastaall.$_;
- }
- $fastaall =~ s/\s//g;#删除不当空白
- @Datafasta = $fastaall =~ m/\G[-A-Z]{3}/g;#按点位分割
- #检查读入数据分组是否正确
- $Datafastanum=@Datafasta;
- print Out ("Datafastanu:$Datafastanum\r\n");
- $n=1;
- foreach $item (@Datafasta) {
- print Out ("$n:$item\r\n");
- $n++;
- }
- #提取Score值大于5的位置对应的碱基
- $i = -1;
- @Datanew = grep {$i++;($Scores[$i] >= 5)}@Datafasta;
- #分组结果
- print Out "@Datanew\n";
- #最终结果
- print Out @Datanew;
- exit;
复制代码 |
|