如何比较两个不同文件中的两个范围

时间:2014-07-23 11:38:54

标签: perl range

我有2个文件。 1个文件包含范围(第1列)和值(第2列)的数据:

1..10 1.5
5..15 4.2

另一个文件包含范围:

的数据
3..14
19..23

我想检查数据1中范围的各个元素是否位于数据2的范围内,如果是,则计算数值范围大于2.0的数据1中的这些单个元素的数量(数据中的第2列) 1)。我没有得到如何放置这些范围,以便它可以解决我的问题。

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题,但我尝试过:

#!/usr/bin/perl
use warnings;
use strict;

my @lines1 = ( '1..10 1.5',
               '5..15 4.2',
             );
my @lines2 = ( '3..14',
               '19..23',
             );

my $sum = 0;
for my $line1 (@lines1) {
    my ($range1, $value) = split ' ', $line1;
    next if $value <= 2;

    my ($from1, $to1) = split /\.\./, $range1;
    for my $range2 (@lines2) {
        my ($from2, $to2) = split /\.\./, $range2;
        next if $to2 < $from1 or $to1 < $from2;

        my $from = $from1 < $from2 ? $from2 : $from1;
        my $to   = $to1   < $to2   ? $to1   : $to2;
        $sum += $value * ($to - $from + 1);
        warn "$value from $from to $to";
    }
}

print "$sum\n";

结果是42,所以一定是对的。