2012-04-11 2 views
0

Я хочу проверить наличие имени сервера, взятого из одного файла в другом. Идея состоит в том, что второй файл содержит несколько строк с именем сервера + дополнительная информация в каждом.соответствует только один раз, но не более

поэтому выход для примера имя «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(); 

любые идеи, как изменить его?

+1

Как удалить дубликаты на одной из страниц perlfaq. – ikegami

+0

Эти эй точно не дублируются, как, например, второй файл содержит: 'F_server01: NO - v1' ' F_server01: LZ - v2' , поэтому часть каждой строки может быть такой же, но не всей строки ... – f00sa

+0

вы в настоящее время выводятся точные дубликаты, и вы спрашивали, как это предотвратить. Вы меняете свой вопрос? Если да, то каков ваш новый вопрос? – ikegami

ответ

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; 
    } 
} 
Смежные вопросы