- 论坛徽章:
- 1
|
稍微改了一下,看楼主是不是能用。既然文件1的第1列有重复,那就把文件1第1列重复的都push进一个数组。- use strict;
- my %file1;
- open my $fh1,"<","file1.txt" or die "Open file1.txt failed.\n";
- while (<$fh1>) {
- chomp;
- my @tmp = split /\s+/;
- if (exists $file1{$tmp[0]}) {
- push @{$file1{$tmp[0]}}, [@tmp[1..$#tmp]];
- }else {
- $file1{$tmp[0]} = [[@tmp[1..$#tmp]]];
- }
- }
- close $fh1;
- open my $fh2,"<","file2.txt" or die "Open file2.txt failed.\n";
- open my $out,">","file3.txt" or die "Create file3.txt failed.\n";
- while (<$fh2>) {
- chomp;
- my @tmp = split /\s+/;
- my $key = $tmp[1];
- if (exists $file1{$key}) {
- foreach my $line (@{$file1{$key}}) {
- next if not ($line->[0] <= $tmp[8]
- and $line->[1] >= $tmp[9]);
- my @str = ($key,@{$file1{$key}},@tmp[0,2..$#tmp],"\n");
- print $out "@str";
- }
- }else {
- next;
- }
- }
- close $fh2;
- close $out;
复制代码 |
|