- 论坛徽章:
- 0
|
本帖最后由 bioinfor 于 2010-05-08 20:43 编辑
经过仔细的测试我才发现,这个程序还是有问题,不像大家想的比较容易实现,如提供如下例子:
chromStart chromEnd start end strand
784700 785513 0 80503 +
796721 797581 1052484 1152578 +
1084717 1085113 1053243 1153332 +
1122560 1123741 1054385 1154467 +
1156127 1156552 2994539 3094599 +
1185954 1186664 3427259 3527354 -
1213443 1213821 6439894 6539956 -
1303330 1303633 9161727 9261836 -
1310383 1310903 10237776 10337861 +
1357007 1357613 19173565 19273642 -
1398944 1399153 21264807 21364925 -
1400270 1401004 23139652 23239719 -
1485776 1486188 23320798 23420865 +
7156049 7157695
7200534 7201946
7240925 7241148
7250899 7251472
7274600 7275456
7278755 7279162
7279751 7280243
7297798 7298207
7309963 7310856
7313639 7313886
8999806 9000352
9004857 9005165
9053309 9054105
9059873 9060943
9068255 9069232
9075769 9076154
9091357 9091476
9096717 9097965
9121138 9121329
9136589 9137010
9178575 9179400
9200489 9200635
9240974 9241964
使用toniz (肚腩照明月)朋友
输出的结果如下:
1084717 1085113 1053243 1152578 +
1122560 1123741
1084717 1085113 1054385 1153332 +
1122560 1123741
而红色标记的符合要求的数值却没有输出出来,不知这是为什么?和数组有关吗? 还是由于数据量增大有关?- open F,"putest427.txt" or die "cant open file! ";
- my $k =<F>;
- my @chrom_start;
- my @chrom_end;
- my @start;
- my @end;
- my @strand;
- while($k =<F>){
- my @k = split /\s+/,$k;
- push @chrom_start,$k[0] if $k[0];
- push @chrom_end,$k[1] if $k[1];
- push @start,$k[2] if $k[2];
- push @end,$k[3] if $k[3];
- push @strand,$k[4] if $k[4];
- }
- foreach(1..@start){
- my $start = shift @start;
- my $end = shift @end;
- my $strand = shift @strand;
- my $flat=0;
- foreach(0..@chrom_start-1){
- if($chrom_start[$_]>$start and $chrom_start[$_]<$end and $chrom_end[$_]>$start and $chrom_end[$_]<$end ){
- if($flat == 0){
- print "$chrom_start[$_] $chrom_end[$_] $start $end $strand\n";
- $flat++;
- }else{
- print "$chrom_start[$_] $chrom_end[$_]\n";
- }
- }
- }
- }
复制代码 |
|