- 论坛徽章:
- 307
|
看了篇帖子, 内容如下:
按照第二列范围压缩显示
cat file:
111 1
111 2
333 7
222 6
222 9
111 3
222 10
333 3
333 4
333 5
333 6
result:
111 1-3
222 6-6
222 9-10
333 3-7
我在处理 333 7 这里, 由于未按第二列的数值排序 我不知道该如何处理, 请大家指点, 谢谢...
代码如下:
- #!/usr/bin/perl
- use strict;
- use warnings;
- my (%hStat);
- while (<>){
- my ($sID, $sVal) = split;
- if (!exists $hStat{$sID}){
- push (@{$hStat{$sID}}, "$sID $sVal-$sVal\n");
- next;
- }
- my $raData = $hStat{$sID};
- my ($sFirst, $sLast) = (split /[- ]/, $raData->[-1])[1,2];
- if ($sLast + 1 == $sVal){
- $raData->[-1] = "$sID $sFirst-$sVal\n";
- next;
- }
- push (@$raData, "$sID $sVal-$sVal\n");
- }
- print @{$hStat{$_}} for sort keys %hStat;
复制代码 输出结果:
111 1-3
222 6-6
222 9-10
333 7-7
333 3-6 |
|