如何删除一个文件中与另一个文件相同的部分 perl

如题,perl编程:如果txt1文件中存在txt2文件中的任意一行,那么将txt1文件中的这一行删除,将去除后的文件存放到txt3中?... 如题,perl 编程:如果txt1文件中存在txt2文件中的任意一行,那么将txt1文件中的这一行删除,将去除后的文件存放到txt3中? 展开
 我来答
speed0424
2010-10-08 · TA获得超过881个赞
知道小有建树答主
回答量:1056
采纳率:0%
帮助的人:302万
展开全部
看了你的要求,我尝试做了一下。说下我的思路,先把TXT2的内容按行读入一个数组,然后再把这个数组的元素(也就是每行内容)与txt1的每一行比较,把结果打印出来。如果要存到TXT3,只要用">"符号重定向即可。

代码如下,仅供参考:
#! /usr/bin/perl -w
#txtout.pl

use strict;

my @tmp;

#txt2读入@tmp。
open FD, "txt2"
or die "$!:";

while (<FD>)
{
chomp;
push @tmp, $_ if ($_=~/\S+/);
}
close FD;
for (@tmp)
{
print "$_\n";
}

#对txt1操作。
$^I=".bak";
while(<>)
{
for my $comp (@tmp)
{
s/^$comp//;
}
print;
}

ps:删除后的东西已经在屏幕打印出来,你也可以通过重定向">"输出到txt3中。 运行这个: perl txtout.pl txt1 > txt3 就行了。

注意:我测试过,如果txt2中有"*"号的话则无法输出。这个我还没解决。

参考资料: 原创

ba_du_co
2010-10-06 · TA获得超过937个赞
知道小有建树答主
回答量:191
采纳率:0%
帮助的人:278万
展开全部
#!/usr/bin/perl -w
#tt

open T1,"txt1";
open T2,"txt2";
@AT2=<T2>;
foreach my $t (<T1>){
print $t unless grep /^$t/,@AT2;
}

==================================
txt1:
1line 1line 1line
2line 2line 2line
3line 3line 3line
4line 4line 4line
5line 5line
6line 6line 6line
7line 7l
8line 8line 8line
9line 9line 9line
10line 10line 10line
11line 11line 11line
12line 12line 12line
13line 13line 13line
14line 14line 14line
15li

txt2:
1line 1line 1line
3lin
5line 5line 5line
7line 7line 7line 7line
9line 9line 9line
11line 11line 11line
13line 13line 13line
15line 15e 15line

#chmod +x tt
#./tt

2line 2line 2line
3line 3line 3line
4line 4line 4line
5line 5line
6line 6line 6line
7line 7l
8line 8line 8line
10line 10line 10line
12line 12line 12line
14line 14line 14line
15li

将去除后的文件存放到txt3中,只要用">"符号重定向即可。
#./tt>txt3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式