之间我有两个文件:file1.txt
和file2.txt
。无论包含此格式的行:使用Perl来搜索匹配两个文件
文件1
name1:value1
文件2
name2:value2
我要检查,如果value1
在list2
发现(在name2
字符串)
我有这个功能:
#!/usr/bin/perl
use warnings;
use Parallel::ForkManager;
sub loadf($);
print "Starting main program\n";
my @list1 = loadf("list1.txt");
my @list2 = loadf("list2.txt");
my $workernum = 10;
open(OK, '>>', 'valid.txt');
open(ER, '>>', 'invalid.txt');
$pm = new Parallel::ForkManager($workernum);
my $cnt = 0;
foreach $line (@list1) {
$cnt++;
my $pid = $pm->start and next;
my @data1 = split(":", $line);
my $name1 = $data1[0];
my $value1 = $data1[1];
my @data2 = split(":", $list2);
my $name2 = $data2[0];
my $value2 = $data2[1];
if (/$value1/i ~~ @list2)
{
print OK $name1 . " - " . $value2 . "\n";
print " [+] Found: " . $name1 . " - " . $value2 . "\n";
}
else
{
print ER $name1 . "\n";
print " [x] Unknown: " . $name1 . " - " . $value1 . "\n";
}
$pm->finish;
}
close(OK);
close(ER);
print "\n*** Finished ***\n";
sub loadf($) {
my @file;
open(FILE, $_[0] . "\n") or die("[+] Couldn't open " . $_[0] . "\n");
@file = <FILE>;
close(FILE);
return @file;
}
__END__
这是行不通的。我究竟做错了什么 ?
为什么要用叉子你这个? – askovpen
我想用多线程来处理它,尝试过并没有工作,所以平行的叉子赢得了它的工作。但这并不重要...... –
尝试从'sub loadf'的'open'中删除''\ n“'。当我尝试打开名称中包含换行符的文件时,它不起作用。 – simbabque