- 论坛徽章:
- 0
|
XB,同一个问题两个帖子。。。。- #!/usr/bin/perl
- use strict;
- use warnings;
- my (%ref, %data);
- open my $in , '<', 'refGene.txt'
- or die "Can't open 'refGene.txt' for reading. $!\n";
- while (<$in>) {
- chomp;
- my @t = split;
- push @{$ref{$t[1]}}, [@t];
- }
- close $in;
- open $in , '<', 'lncipedia_location.txt'
- or die "Can't open 'lncipedia_location.txt' for reading. $!\n";
- while (<$in>) {
- chomp;
- my @t = split;
- push @{$data{$t[1]}}, [@t];
- }
- close $in;
- open my $include , '>', 'include.txt'
- or die "Can't create 'include.txt' for writing. $!\n";
- open my $non_include , '>', 'non_include.txt'
- or die "Can't create 'non_include.txt' for writing. $!\n";
- open my $overlap , '>', 'overlap.txt'
- or die "Can't create 'overlap.txt' for writing. $!\n";
- while (my ($chr, $v) = each %ref) {
- my @ref_data = sort {$a->[2] <=> $b->[2]} @$v;
- next unless exists $data{$chr};
- my @inc_data = sort {$a->[2] <=> $b->[2]} @{$data{$chr}};
- for (@ref_data) {
- my @rd = @$_;
- last unless @inc_data;
- while (1) {
- last unless @inc_data;
- my @id = @{+shift @inc_data};
- if ($id[3] < $rd[2]) {
- print {$non_include} join("\t", @id), "\n";
- next;
- }
- if ($id[2] > $rd[3]) {
- unshift @inc_data, [@id];
- last;
- }
- if ($id[2] >= $rd[2] && $id[3] <= $rd[3]) {
- print {$include} join("\t", @id), "\n";
- }
- else {
- print {$overlap} join("\t", @id), "\n";
- }
- }
- }
- delete $data{$chr};
- }
- while (my ($chr, $v) = each %data) {
- my @inc_data = @$v;
- for (@inc_data) {
- print {$non_include} join("\t", @$_), "\n";
- }
- }
- close $include;
- close $non_include;
- close $overlap;
复制代码 |
|