只匹配一次,但不能多次匹配



我想检查是否存在从另一个文件中获取的服务器名称。这个想法是第二个文件包含多行,每行都有服务器名称+附加信息。

因此,示例名称"Server01"的输出为

server01
server01
server01

当然,我只想在两个文件中存在的每个名称的输出XLS文件中使用它一次。

到目前为止,该计划是:

#!/usr/bin/perl -w

use Spreadsheet::WriteExcel;
#OPEN FILES
open(FILE, "CEP06032012.csv") or die("Unable to open CEP file");
@CEP_file = <FILE>;
close(FILE);
open(FILE, "listsystems_temp") or die("Unable to open listsystems file");
@listsystems_file = <FILE>;
close(FILE);
#XLS properties
my $workbook  = Spreadsheet::WriteExcel->new('report.xls');
my $worksheet_servers = $workbook->add_worksheet();

#MAIN
my $r = 0;
foreach my $lines(@CEP_file){ 
my @CEP_file = split ";", $lines;
my $server = $CEP_file[8];
foreach my $lines2(@listsystems_file){
    if ($lines2 =~ m/.*$server.*/i && $server ne ""){
        print "$server n";
        #print "$lines2 n";
        $worksheet_servers->write($r, 0, "$server");
        $r++;
    }
} 
}

exit();

有什么想法如何改变它吗?

试试这个。这将跳过多次出现$server,只保留一次。

my %seen;
foreach my $lines2(@listsystems_file){
    next if $seen{$server}; 
    if ($lines2 =~ m/.*$server.*/i && $server ne ""){
        print "$server n";
        #print "$lines2 n";
        $worksheet_servers->write($r, 0, "$server");
        $r++;
        $seen{$server} = 1;
    }
}

最新更新