高分求perl高手!如何求出两个文件中重复数据的个数?高手指点

wings2004 2004-05-08 10:27:36
其中一个文件部分内容如下:
3561,17158,1
5511,8335,1
209,18497,3
... ...
如果另一个文件的内容:
3561,17158,4
5511,8335,6
209,18497,39
1239,600,2
1,17159,1
4621,9741,1
... ...输出的结果应为:
3561,17158,1 or 4
5511,8335,6 or 1
209,18497,39 or 3
三个重复的。
如果两个文件中前两个数相同视为一个重复如:3561,17158重复
文件大概有一万多行


...全文
86 3 点赞 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
liu22 2004-09-03
open(INFILE1,"temp1.txt");
while(<INFILE1>)
{
$hash{$1} .= " or $2" if($_=~/(\d+,\d+),(\d+)/);
}
close INFILE1;

open(INFILE2,"temp2.txt");
while(<INFILE2>)
{
$hash{$1} .= " or $2" if($_=~/(\d+,\d+),(\d+)/);
}
close INFILE2;

foreach $key(keys %hash)
{
if ($hash{$key} =~ /( or \d+){2,}/)
{
($dump,$hash{$key}) =($hash{$key} =~ /^( or )(.*)/);
print "$key,$hash{$key}\n";
}
}

以上代码适应同一文件有重复数据的情况。

运算速度尚可,两个三万行的文件35秒运行完毕(CII 1G,192M,WINXP)。
  • 打赏
  • 举报
回复
julyice 2004-09-01
先将一个文件中的数据读到hash数组中
while(<INFILE>)
{
$hash{$1}=$2 if($_=~/(\d+,\d+),(\d+)/);
}
然后读另一个文件输出
while(<INFILE2>)
{
if($_=~/(\d+,\d+),(\d+)/)
{
print "$_" if(exists $hash{$1});
}
}
  • 打赏
  • 举报
回复
wings2004 2004-05-08
要代码
  • 打赏
  • 举报
回复
相关推荐
发帖
脚本语言
加入

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
申请成为版主
帖子事件
创建了帖子
2004-05-08 10:27
社区公告

CSDN 脚本语言社区接受专栏投稿(专栏会在顶部创建专属你的栏目),投稿需满足以下要求:

  • 脚本语言技术相关;
  • 文章持续更新,保持活跃;
  • 内容清晰明了,干货为主;
  • 文章排版有序,有条有理。

本社区开通招聘专栏,发布招聘信息请联系版主,发布者需要保证招聘信息真实有效,CSDN 平台和版主不对招聘内容负责!

联系方式:私聊版主、发送邮件、QQ联系等均可: