perl 处理一些数据,本人初学者,求帮助!!!

1274811 1274860
1274811 1274934
1321650 1321812
132547 132629
132547 132637
1653180 1653238
1653180 1653245
1653180 1653460
179739 179786
1859415 1859629
1859539 1859629
1864650 1864864
1864774 1864864
将上面第一列和第二列的数据看成一对表示范围的数据,怎么将相交叉的数据合并成表示大的范围的数据。
结果如下
1274811 1274934

1321650 1321812
132547 132637
1653180 1653460
179739 179786
1859415 1859629
1864650 1864864

use strict;
use warnings;
my %result1;
my %result2;
while (<DATA>) {
    chomp;
    my @tmp = split;
    if (! defined ($result1{$tmp[0]}) || $result1{$tmp[0]} < $tmp[1]){
            $result1{$tmp[0]} = $tmp[1];
    }
}
while (my ($k,$v) = each %result1) {
    if (! defined ($result2{$v}) || $result2{$v} > $k){
        $result2{$v} = $k;
    }
}
while (my ($k,$v) = each %result2) {
    print "$v $k\n";
}
__DATA__
1274811 1274860
1274811  1274934
1321650  1321812
132547   132629
132547    132637
1653180   1653238
1653180  1653245
1653180  1653460
179739   179786
1859415   1859629
1859539  1859629
1864650  1864864
1864774  1864864

  =====

$perl test.pl
179739 179786
1274811 1274934
1859415 1859629
132547 132637
1653180 1653460
1864650 1864864
1321650 1321812

 

最后打印的顺序我没有办法保证跟你的结果一样,因为hash存储的时候就是乱序的。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答