- 论坛徽章:
- 0
|
本帖最后由 最爱在深秋 于 2011-11-18 11:18 编辑
有两个FASTA格式的文件,如果两个文件存在相同的ID,则比较序列是否一样,如果不一样,则输出ID和序列,放进OUT.求完整版脚本
我的想法是建hash,hash的键值是两个文件的ID和序列,然后作判断输出,但是在实现的时候出错了。
#!/usr/bin/perl -w
use strict;
open IN1, "<$ARGV[0]" || die $!;
open IN2, "<$ARGV[1]" || die $!;
open OUT, ">$ARGV[2]" || die $!;
my %hash;
$/ = ">";
<IN1>;
$/ = "\n";
while (<IN1>) {
chomp(my $id1 = $_);
if(/(\w+).*/){
$id1=$1;
}
$/ = ">";
my $seq1 = <IN1>;
$/ = "\n";
$seq1 =~ s/>$//;
$seq1 =~ s/[\r\n]//g;
$hash{$id1}=$seq1;
}
$/ = ">";
<IN2>;
$/ = "\n";
while (<IN2>) {
chomp(my $id2 = $_);
if(/(\w+).*/){
$id2=$1;
}
$/ = ">";
my $seq2 = <IN2>;
$/ = "\n";
$seq2 =~ s/>$//;
$seq2 =~ s/[\r\n]//g;
if( exists $hash{$id2}){
print OUT ">$id2\n$seq2" if($seq2 ne $hash{$id2});
}
}
close IN1;
close IN2; |
|