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

2025-04-13 04:01:32
推荐回答(2个)
回答1:

看了你的要求,我尝试做了一下。说下我的思路,先把TXT2的内容按行读入一个数组,然后再把这个数组的元素(也就是每行内容)与txt1的每一行比较,把结果打印出来。如果要存到TXT3,只要用">"符号重定向即可。

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

use strict;

my @tmp;

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

while ()
{
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中有"*"号的话则无法输出。这个我还没解决。

回答2:

#!/usr/bin/perl -w
#tt

open T1,"txt1";
open T2,"txt2";
@AT2=;
foreach my $t (){
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