少し不具合が発生しました。次のような2つのファイルがあります。
ファイル1
chr10 179423 181499 181423 2076 + NM_001202464 ZMYND11
chr10 693887 696118 695887 2231 + NR_027151 C10orf108
chr10 694016 696382 696016 2366 + NR_027152 C10orf108
chr10 1032348 1034467 1034348 2119 + NM_012341 GTPBP4
chr10 1203707 1205930 1205707 2223 + NR_015376 LINC00200
ファイル2
chr10 176225
chr10 180990
chr10 181315
chr10 181529
chr10 181695
chr10 182183
chr10 686673
chr10 686699
chr10 688273
chr10 695323
chr10 698323
chr10 722737
chr10 906075
chr10 908409
chr10 928052
chr10 950429
chr10 989722
chr10 1006348
chr10 1010731
chr10 1020229
chr10 1034526
chr10 1064089
chr10 1103000
chr10 1103198
chr10 1103267
chr10 1114980
chr10 1135327
chr10 1150625
chr10 1193412
chr10 1193677
chr10 1199817
chr10 1212181
chr10 1212310
chr10 1216875
chr10 1218919
chr10 1226134
chr10 1226254
必要なもの
行ごとに、すべての4th element
from からFile1
値を出力しますFile2
。>= 2nd element from file1 & <= (4th element from file1+2000)
たとえば、File1
の 4 番目の要素row1
は181423です。からFile2
、>= 2nd element from file1
(179423)と<= 4th element from file1+2000
(183423)の値は 18090、181315、181529、181695、182183 です。
値が見つからない場合は、NA
出力する必要があります。
望ましい出力
次のようなタブ区切りファイル。
chr10 179423 181423 183423 NM_001202464 ZMYND11 180990
181315
181529
181695
182183
chr10 693887 695887 697887 NR_027151 C10orf108 695323
chr10 694016 696016 698016 NR_027152 C10orf108 695323
chr10 1032348 1034348 1036348 NM_012341 GTPBP4 1034526
chr10 1203707 1205707 1207707 NR_015376 LINC00200 NA
マイコード
私はそれについてどうやって行くかについて全く無知です。最初に、との要素のfile2
間にある値を見つけるだけでよいと言われました。そのために、ハッシュを使用して次のコードを作成しましたが、これは機能していましたが、完全な仕事をしていませんでした。(ループ内の部分は、私が思っていたとおりに動作していないため、より大きな値がすべて出力されています) 2nd
4th
file1
&&
if
これで、このコードは完全に役に立たなくなりました:/ Perl プログラミングを始めて 3 か月以内に狡猾なプログラムを書けるようになるかどうかわからないので、頭がいっぱいです。
use 5.014;
use warnings;
#Assign filenames
my $file1 = 'file1.txt' || die $!; #File with TSS coordinates
my $file2 = 'file2.txt' || die $!; #File with G4 coordinates
#Open files
open my $fh1, '<' , $file1 || die $!;
open my $fh2, '<' , $file2 || die $!;
#Open output
open OUT, ">G4_coordinates_promoters$file1.out" || die $!;
#Read files
while (<$fh1>) {
chomp;
my %data1; #Hash for TSS
my ($key1, $val1) = (split) [1,3];
$data1{$key1} = $val1;
while (<$fh2>) {
chomp ;
my %data2; #Hash for G4 coordinates
my ($key2, $val2) = (split) [1,2];
$data2{$key2} = $val2;
#Compare hashes
if ( ($key2 > $key1) &&
($key2 << $data1{$key1})){ #Here the code after && is NOT working
say OUT $key2
}
}
}
私の問題を解決していただきありがとうございます。この問題にアプローチするための簡単な方法が見つかれば幸いです。