免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2155 | 回复: 7
打印 上一主题 下一主题

如何将相同的行归为一类? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-22 22:13 |只看该作者 |倒序浏览
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

论坛徽章:
0
2 [报告]
发表于 2007-09-22 23:12 |只看该作者
use strict;
open my $I,"1.txt";
my @c = <$I>;
for(0..$#c) {

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

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

&nbsp;&nbsp;&nbsp;&nbsp;$c[$_] .= "\n" if (substr($c[$_],1) ne substr($c[$_+1],1));
}
print join("\n",@c);

论坛徽章:
0
3 [报告]
发表于 2007-09-23 00:31 |只看该作者

回复 #2 royalzhang 的帖子

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

ps。最近忙于“秋菊打官司”,累啊

论坛徽章:
0
4 [报告]
发表于 2007-09-23 10:38 |只看该作者
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

论坛徽章:
0
5 [报告]
发表于 2007-09-23 18:40 |只看该作者
原帖由 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个字符呢?

论坛徽章:
0
6 [报告]
发表于 2007-09-23 18:42 |只看该作者
原帖由 royalzhang 于 2007-9-22 23:12 发表
use strict;
open my $I,"1.txt";
my @c = ;
for(0..$#c) {

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

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




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


这样呢?
1 AAAAATTTTCCCC
2 AAAAATTTTCCCC

3 TAAAATTTTCCCY
4 TAAAATTTTCCCY

5 AAAAAUTTTCCCY
6 AAAAAUTTTCCCY

7 AAAAATTTTCCCC

[ 本帖最后由 Lonki 于 2007-9-23 18:45 编辑 ]

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

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

论坛徽章:
0
8 [报告]
发表于 2007-09-23 22:32 |只看该作者
原帖由 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不同,但 ...

标准太模糊,没法办
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP