我对Perl很陌生,正在大学进行生物信息学项目。我已经FILE1包含位置的列表,格式为:将FILE1值与FILE2范围进行比较并打印匹配
99269
550
100
126477
1700
和file2的格式为:
517 1878 forward
700 2500 forward
2156 3289 forward
99000 100000 forward
22000 23000 backward
我想在FILE1每个位置比较每一个范围在FILE2值,和如果一个位置落入其中一个范围,那么我想打印位置,范围和方向。
所以我期望的输出将是:
99269 99000 100000 forward
550 517 1878 forward
1700 517 1878 forward
目前,它会没有错误运行,但它不输出任何信息,所以我不确定我要去的地方错了!当我拆分最终的'if'规则时,它将运行,但只有在位置与范围完全相同的行上时才能工作。
我的代码如下:
#!/usr/bin/perl
use strict;
use warnings;
my $outputfile = "/Users/edwardtickle/Documents/CC22CDS.txt";
open FILE1, "/Users/edwardtickle/Documents/CC22positions.txt"
or die "cannot open > CC22: $!";
open FILE2, "/Users/edwardtickle/Documents/CDSpositions.txt"
or die "cannot open > CDS: $!";
open(OUTPUTFILE, ">$outputfile") or die "Could not open output file: $! \n";
while (<FILE1>) {
if (/^(\d+)/) {
my $CC22 = $1;
while (<FILE2>) {
if (/^(\d+)\s+(\d+)\s+(\S+)/) {
my $CDS1 = $1;
my $CDS2 = $2;
my $CDS3 = $3;
if ($CC22 > $CDS1 && $CC22 < $CDS2) {
print OUTPUTFILE "$CC22 $CDS1 $CDS2 $CDS3\n";
}
}
}
}
}
close(FILE1);
close(FILE2);
我已经发布了same question on Perlmonks。
[在PerlMonks Crossposted](http://www.perlmonks.org/ ?NODE_ID = 1104164)。 – choroba 2014-10-17 10:22:02
1700适合两个范围('517 1878'和'700 2500'),但你只需要其中的一个。你选择那个标准是什么? – TLP 2014-10-17 11:28:00
这里的数据由数据组成,范围实际上是基因组的片段,所以如果它匹配两次就可以,只要它找到一个范围即可!谢谢你指出,虽然。 – 2014-10-17 11:58:37