- 论坛徽章:
- 3
|
本帖最后由 mcshell 于 2012-10-18 10:12 编辑
转自SHELL版块。。
cat file.txt
abc 1
abc 2
abc 3
cde 1
cde 2
fff 1
fff 2
fff 3
fff 5
fff 7
fff 9
fff 10
fff 11
fff 12
fff 13
想要处理成
abc:1-3
cde:1-2
fff:1-3,5,7,9-13
====
就是按第一列分组,第二列如果是连续的,就用1-4这样,不是连续的就用逗号分割,2,5,6,这样。
自己试着写了,可以判断数字连续,但是想不到如何取首尾两个数字。。。
code:- #!/usr/bin/perl
- use strict;
- use warnings;
- use Data::Dumper;
- my %hash;
- my @line;
- while(<DATA>){
- @line=split;
- push @{$hash{$line[0]}},$line[1];
- }
- map{print "$_:";
- my $letter = $_;
-
- my $num = @{$hash{$letter}} ;
- for(my $i=0;$i<$num;$i++){
- if(
- (($hash{$letter}[$i+1]||0) - $hash{$letter}[$i] == 1)
- ||
- ($hash{$letter}[$i+1]||0)- $hash{$letter}[$i] == -($hash{$letter}[$i])
- || ($hash{$letter}[$i] == $hash{$letter}[$i-1] + 1)
- ){
- print $hash{$letter}[$i]."-";
- }else{
- print ",$hash{$letter}[$i]";
- }
- }
- print "\n"}keys %hash;
- __DATA__
- abc 1
- abc 2
- abc 3
- cde 1
- cde 2
- fff 1
- fff 2
- fff 3
- fff 5
- fff 7
- fff 9
- fff 10
- fff 11
- fff 12
- fff 13
- 输出:
- F:\perl\cu>info.pl
- cde:1-2-
- abc:1-2-3-
- fff:1-2-3-,5,79-10-11-12-13-
复制代码 求指导一下。。。。
也想看看大家的方法。 |
|