2012-04-11 12 views
0

あるファイルから取得したサーバー名の存在を別のファイルで確認します。 2番目のファイルには、それぞれにサーバー名+追加情報を含む複数の行が格納されています。は一度だけ一致しますがそれ以上は一致しません

ので、例の名前「SERVER01」の出力には、私はもちろんの両方のファイルに存在する名前ごとに一度だけ出力XLSファイルでそれを持ちたい

server01 
server01 
server01 

です。

プログラムは、これまでのところです:

#!/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ページの1つです。 – ikegami

+0

これらのエールは正確には重複しません。たとえば、2番目のファイルには次のものが含まれています。 'F_server01:NO-v1' ' F_server01:LZ-v2' 各行の一部は同じだが全行ではない... – f00sa

+0

現在正確な重複が出力されていることを示しています。あなたはそれを防ぐ方法を尋ねました。あなたはあなたの質問を変えていますか?もしそうなら、あなたの新しい質問は何ですか? – ikegami

答えて

0

これを試してください。これは$ serverの複数の出現をスキップし、1つしか保持しません。

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; 
    } 
} 
関連する問題