如何将相同的行归为一类?

如何将相同的行归为一类?

1 AAAAATTTTCCCC
2 AAAAATTTTCCCC
3 AAAAATTTTCCCC
4 TAAAATTTTCCCY
5 TAAAATTTTCCCY
6 AAAAAUTTTCCCY
7 AAAAAUTTTCCCY


分类后输出如下格式:
将各类用空行隔开

1 AAAAATTTTCCCC
2 AAAAATTTTCCCC
3 AAAAATTTTCCCC

4 TAAAATTTTCCCY
5 TAAAATTTTCCCY

6 AAAAAUTTTCCCY
7 AAAAAUTTTCCCY
use strict;
open my $I,"1.txt";
my @c = <$I>;
for(0..$#c) {

    chomp $c[$_];chomp $c[$_+1]; # 去掉本行和下行最后的换行符

    # 如果本行和下行不同,就在本行多加一个换行

    $c[$_] .= "\n" if (substr($c[$_],1) ne substr($c[$_+1],1));
}
print join("\n",@c);
赞一个,我本来以为要用hash的,现在发现,其实没那个必要
简单的思路,简单的做法,效果还更好
对于标准格式的文件,
chomp $c[$_];chomp $c[$_+1]; # 去掉本行和下行最后的换行符
这一行貌似还可以去掉,不知道royalzhang同意不,虽然去掉更安全

ps。最近忙于“秋菊打官司”,累啊
1 AAAAATTTTCCCC
2 AAAAATTTTCCCC
3 AAAAATTTTCCCC
4 TAAAATTTTCCCY
5 TAAAATTTTCCCY
6 AAAAAUTTTCCCY
7 AAAAAUTTTCCCY
10 AAAAAUTTTCCCP
11 WAAAATTTTCCCY

若我还有一行10,他只有一个与 7不同,但也要归为7那一类中,
11只有一个和5不同,同样也要归为第5的那一类中。

分类后如下:
1 AAAAATTTTCCCC
2 AAAAATTTTCCCC
3 AAAAATTTTCCCC

4  TAAAATTTTCCCY
5  TAAAATTTTCCCY
11 WAAAATTTTCCCY


6  AAAAAUTTTCCCY
7  AAAAAUTTTCCCY
10 AAAAAUTTTCCCP


QUOTE:
原帖由 choose2005 于 2007-9-23 10:38 发表
1 AAAAATTTTCCCC
2 AAAAATTTTCCCC
3 AAAAATTTTCCCC
4 TAAAATTTTCCCY
5 TAAAATTTTCCCY
6 AAAAAUTTTCCCY
7 AAAAAUTTTCCCY
10 AAAAAUTTTCCCP
11 WAAAATTTTCCCY

若我还有一行10,他只有一个与 7不同,但 ...

就是说, 相差1个字符的也算做一类?

相差2个字符呢?


QUOTE:
原帖由 royalzhang 于 2007-9-22 23:12 发表
use strict;
open my $I,"1.txt";
my @c = ;
for(0..$#c) {

    chomp $c[$_];chomp $c[$_+1]; # 去掉本行和下行最后的换行符

    # 如果本行和下行不同,就 ...

仅考虑了同类字符串都相邻的情况 ? 还是我理解多了一点点


这样呢?
1 AAAAATTTTCCCC
2 AAAAATTTTCCCC
3 TAAAATTTTCCCY
4 TAAAATTTTCCCY
5 AAAAAUTTTCCCY
6 AAAAAUTTTCCCY
7 AAAAATTTTCCCC



QUOTE:
原帖由 perljoker 于 2007-9-23 00:31 发表
赞一个,我本来以为要用hash的,现在发现,其实没那个必要
简单的思路,简单的做法,效果还更好
对于标准格式的文件,
chomp $c[$_];chomp $c[$_+1]; # 去掉本行和下行最后的换行符
这一行貌似还可以去掉, ...

最后一行可能没有换行,会造成误判。


QUOTE:
原帖由 choose2005 于 2007-9-23 10:38 发表
1 AAAAATTTTCCCC
2 AAAAATTTTCCCC
3 AAAAATTTTCCCC
4 TAAAATTTTCCCY
5 TAAAATTTTCCCY
6 AAAAAUTTTCCCY
7 AAAAAUTTTCCCY
10 AAAAAUTTTCCCP
11 WAAAATTTTCCCY

若我还有一行10,他只有一个与 7不同,但 ...

标准太模糊,没法办