我有 2 个文件,一个小一个,一个大一个。小文件是大文件的子集。
例如:
小文件:
solar:1000
alexey:2000
大文件:
andrey:1001
solar:1000
alexander:1003
alexey:2000
我想从 Big.txt 中删除 Small.txt 中也存在的所有行。换句话说,我想删除大文件中小文件共有的行。
因此,我编写了一个 Perl 脚本,如下所示:
#! /usr/bin/perl
use strict;
use warnings;
my ($small, $big, $output) = @ARGV;
open(BIG, "<$big") || die("Couldn't read from the file: $big\n");
my @contents = <BIG>;
close (BIG);
open(SMALL, "<$small") || die ("Couldn't read from the file: $small\n");
while(<SMALL>)
{
chomp $_;
@contents = grep !/^\Q$_/, @contents;
}
close(SMALL);
open(OUTPUT, ">>$output") || die ("Couldn't open the file: $output\n");
print OUTPUT @contents;
close(OUTPUT);
但是,此 Perl 脚本不会删除 Big.txt 中 Small.txt 共有的行
在这个脚本中,我首先打开大文件流并将整个内容复制到数组@contents 中。然后,我遍历小文件中的每个条目并检查它是否存在于大文件中。我从大文件中过滤该行并将其保存回数组中。
我不确定为什么这个脚本不起作用?谢谢