我想检查另一个文件中是否存在服务器名称。这个想法是第二个文件包含多行,服务器名称+每个附加信息。
所以示例名称“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();
任何想法如何改变它?
答案 0 :(得分:0)
试试这个。这将跳过$ 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;
}
}