我有2个文件。 1个文件包含范围(第1列)和值(第2列)的数据:
1..10 1.5
5..15 4.2
另一个文件包含范围:
的数据3..14
19..23
我想检查数据1中范围的各个元素是否位于数据2的范围内,如果是,则计算数值范围大于2.0的数据1中的这些单个元素的数量(数据中的第2列) 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,所以一定是对的。