use strict; use warnings; my $in1="アラビのDatabase(TAIR10)";#ほかのリファレンスの場合指定する列の変更が必要 my $IN1; my $in2="関連付けるfastaファイル";#>〜で始まるID列と配列データのfastaファイル my $IN2; my $in3="Blast検索結果ファイル";#outfmt 6によるローカルBLASTの結果ファイル my $IN3; my $out="OUTfile.txt";#出力されるファイル名 my $OUT; my $L=""; my @lis=(); my @lis2=(); my @lis3=(); my @lis4=(); my $tag=""; my $tag2=""; my $Symbol=""; my $gi=""; my %hash=(); my %hash2=(); my %hash3=(); my %hash4=(); my $num=0; my $seq=""; my $anno=""; my $sym=""; open $IN1,"<",$in1 or die "Error $in1\n"; open $IN2,"<",$in2 or die "Error2 $in2\n"; open $IN3,"<",$in3 or die "Error3 $in3\n"; open $OUT,">",$out; while ($L=<$IN1>){ chomp $L; #TAIR10のAGIを$1として保存 if($L=~ /^>(.{11})\s\|.+$/){ $tag=$1; @lis=split /\|/,$L; #シンボルを$1として保存 if($lis[1]=~ /^\sSymbols.\s(.+)$/){ $Symbol=$1; #AGIをタグとしたannotation, symbolをそれぞれhash, hash2へ入れ込む $hash{$tag}="$lis[2]"; $hash2{$tag}="$Symbol"; } } else{ next; } } close $IN1; while ($L=<$IN2>){ chomp $L; #contig_IDを$1, giを$2として指定 if($L=~ /^>(TCONS_\d+)\sgene=(.+)$/){ $tag2=$1; $gi=$2; #contig_IDをタグとしてhash3へgiを入れ込む $hash3{$tag2}=$gi; $num=1; } elsif($num==1){ #ID列の次の行に存在する配列行を$seqへ入れ込む $seq=$L; #contig_IDをタグとしてhash4へ配列情報を入れ込む $hash4{$tag2}=$seq; $num=0; } } close $IN2; while ($L=<$IN3>){ chomp $L; @lis4=split /\t/,$L; #IN1でhash, hash2に入れ込んでおいた情報をBLAST結果内のAGIを利用して呼び出し if(exists $hash{$lis4[1]} && exists $hash2{$lis4[1]}){ $sym="$hash2{$lis4[1]}"; $anno="$hash{$lis4[1]}"; #IN2でhash3, hash4に入れ込んでおいた情報をBLAST結果内のcontig_IDを利用して呼び出し if(exists $hash3{$lis4[0]} && exists $hash4{$lis4[0]}){ $gi="$hash3{$lis4[0]}"; $seq="$hash4{$lis4[0]}"; print $OUT ">$L\t$lis4[1]\t$sym\t$anno\t$gi\n$seq\n"; } } } close $IN3; close $OUT; exit;