私はPerlの初心者であり、プログラミング全般(1か月未満の経験)です。
より大きな問題を解決するためには、解決する必要のある問題に困惑しています。
基本的に、次のような2つの配列があります。
@array1 = ('NM_1234' , '1452' , 'NM_345' , '5008' , 'NR_6145' , '256');
@array2 = ('NM_5673' , '2' , 'NM_345' , '5' , 'NR_6145' , '10');
@array1
ID番号とそれに続く長さが含まれます。id番号はヌクレオチド配列で、長さは配列の長さです。
@array2
ID番号の後にそれぞれのG-Quadruplex構造の数が含まれるため、一部のシーケンスにはそのような構造が2つしか含まれず、他のシーケンスには10以上が含まれます。
基本的な問題は、一致するすべてのID番号@array2
の「長さ番号」@array1
(たとえば、5008、256)に追加する必要があることです。
たとえば、両方の配列でNM_345が一致する場合、 5008を追加して、最終結果がNM_345,5,5008のようになるようにする必要があります。
同様に、NR_6145および他のそのような一致(に20,000を超えるID番号があります@array2
)
これまでのところ、両方の配列で同じID番号を検索できるコードを記述できました。コードは次のとおりです。
#Enter file name
print "Enter file name: ";
$in =<>;
chomp $in;
open(FASTA,"$in") or die;
@data = <FASTA>; #Read in data
$data = join ('',@data); #Convert to string
@data2 = split('\n',$data); #Explode along newlines
#Enter 2nd file name
print "\n\nEnter 2nd file name: ";
$in2=<>;
chomp $in2;
open(FASTA,"$in2") or die;
@entry =<FASTA>; #Read in data
$entry = join('',@entry); #Convert to string
@entry2 = split('\n',$entry); #Explode along newlines
my %seen;
for $item (@data2) {
if($item =~ /([0-9]+)/){
push @{$seen{$key}}, $item;#WHAT IS THIS DOING? HOW?
}
}
for my $item (@entry2) {
if ($item =~ /([0-9]+)/){
if (exists $seen{$key}) {
print $item,"\n";
};
}
}
exit;
ここで、このソリューションの2つの配列から同じ要素を見つけるコードを導出したので、完全なクレジットはChas.Owensにあります:https ://stackoverflow.com/a/1064929/1468737 。そしてもちろん、私はまだこの部分を完全には理解していません:
push @{$seen{$key}}, $item;#WHAT IS THIS DOING? HOW?
ハッシュ値の配列か何かのように見えますか?
では、@array1から@array2にlength要素を追加するにはどうすればよいですか?スプライスコマンドを使用する必要があると思いますが、どうすればよいですか?
私の希望する出力は次のようになります。
NM_345,5,5008 <br>
NM_6145,10,256<br>
etc
また、この出力をファイルに保存する必要があります。このファイルは、後で分析されて、長さとG-quadruplex数の間に相関関係があるかどうかが確認されます。
どんな助けや入力も深く感謝します。
私の問題を解決するために時間を割いていただきありがとうございます!
編集:この編集は、データファイルがどのように見えるかを示すためのものです。それらは基本的に私が書いた他のプログラムからのプットプットファイルです。
私の最初のファイル、Transcriptlength.faという名前で、40,000を超えるID番号が入って@array1
いるのは次のようになります。
NR_037701
3353
NM_198399
2414
NR_026816
601
NR_027917
658
NR_002777
1278
Quadcount.AllGtranscripts.faという名前の2番目のファイルには、20,000を超えるid番号が入力されて@array2
おり、次のようになります。
NM_000014
1
NM_000016
3
NM_000017
19
NM_000018
2
NM_000019
3
NM_000020
30
NM_000021
1
NM_000022
2
NM_000023
5
NM_000024
1
NM_000025
15
NM_000029
5