- 论坛徽章:
- 0
|
本帖最后由 iamlimeng 于 2012-05-08 05:55 编辑
回复 1# 怿_mao44
LZ表达得不是太清晰,或许这个问题本身就很难表达!实现了一下,因不了解你的数据规律,不一定能符合你的要求:
- #!/usr/bin/perl
- use strict;
- use warnings;
- my %data1;
- open (DATA, "data1.txt");
- while (<DATA>) {
- chomp;
- my ($start,$end,$ID,$name1,$name2) = split /\s+/;
- $data1{$name2} = "$start\t$end\t$ID\t$name1";
- }
- close(DATA);
- my %data2;
- open (DATA, "data2.txt");
- while (<DATA>) {
- chomp;
- my ($name2,$scort,$plus,$count,$start1,$end1,$name1) = split /\s+/;
- $data2{$name2}{$count} = "$start1\t$end1";
- }
- close(DATA);
- open (OUT, ">result.txt");
- foreach my $name2 (sort keys %data2) {
- next if (!$data1{$name2});
- my ($start,$end,$ID,$name1) = split(/\t/,$data1{$name2});
- my $pre = "-\t-\t-";
- my $post = $pre;
- my $check = 0;
- my @count = sort keys %{$data2{$name2}};
- foreach (@count) {
- my ($start1,$end1) = split(/\t/,$data2{$name2}{$_});
- if ($start >= $end1) {
- $pre = "$_\t$data2{$name2}{$_}";
- }
- if ($end <= $start1 && !$check) {
- $post = "$_\t$data2{$name2}{$_}";
- $check = 1;
- }
- }
- print OUT "$data1{$name2}\t$name2\t$pre\t$post\n";
- }
- close OUT;
复制代码 另外,如果数据量比较大,上面的代码不适合! |
|