+ -
当前位置:首页 → 问答吧 → 用perl 比较两个文件

用perl 比较两个文件

时间:2008-03-07

来源:互联网

请教一下, 我现在在用perl 比较两个文件, 哪位高手能指点一下, 大体是这样的:
第一个文件比如是:
1:
1253 4
1111 3
2435 5
2:
1254 6
2354 3
2353 4
第二个文件比如是:
1:
1111
2435
2:
1254

————————————————————
输出是:
1:
1111 3
2435 5
2:
1254 6

用perl 如何实现? 不知道我说明白了吗? 谢谢了!!!

作者: lymaple   发布时间: 2008-03-07

没明白。怎么算出来的?

作者: iambic   发布时间: 2008-03-07

也没有看明白。

作者: Aylazhang   发布时间: 2008-03-07

就是说比较两个文件,从第一个文件中找,如果有第二个文件相同的部分,输出整行。

作者: lymaple   发布时间: 2008-03-08

Perl code
open(IN, "1") or die "open error: $!";
my @x = <IN>;
close (IN);
open(IN, "2") or die "open error: $!";
my @y = <IN>;
close (IN);

chomp(@y);
my $p = join('|', map{quotemeta} @y);
print (grep /$p/, @x);

作者: iambic   发布时间: 2008-03-08

太感谢了,我运行了一下,出来的结果是

1:
1111 3
2435 5
1254 6

怎么把它改成
1:
1111 3
2435 5
2:
1254 6

谢谢了(就是说怎么把2:添上)

作者: lymaple   发布时间: 2008-03-09

那是因为你第一个文件的两个冒号不一样。一个英文一个中文。

作者: iambic   发布时间: 2008-03-09

引用 4 楼 iambic 的回复:
Perl codeopen(IN,"1") ordie"open error: $!";my@x=<IN>;close(IN);open(IN,"2") ordie"open error: $!";my@y=<IN>;close(IN);chomp(@y);my$p=join('|',map{quotemeta}@y);print(grep/$p/,@x);

经典~

作者: gandrchen   发布时间: 2008-03-11

引用 4 楼 iambic 的回复:
Perl codeopen(IN,"1") ordie"open error: $!";my@x=<IN>;close(IN);open(IN,"2") ordie"open error: $!";my@y=<IN>;close(IN);chomp(@y);my$p=join('|',map{quotemeta}@y);print(grep/$p/,@x);

实在是经典

作者: onefours   发布时间: 2008-03-11

怎么输出不同的地方呢

作者: mengxiao1001   发布时间: 2008-12-03

引用 9 楼 mengxiao1001 的回复:
怎么输出不同的地方呢

最后一行:
print (grep ! /$p/, @x);

作者: iisbsd   发布时间: 2008-12-05

非常感谢

作者: mengxiao1001   发布时间: 2008-12-08

不得不景仰一下4楼的。。。

作者: changrui82   发布时间: 2008-12-19

学习了,很管用。谢谢!

作者: tqq_0716   发布时间: 2011-05-11