0

あるファイルから取得したサーバー名の存在を別のファイルで確認したい。アイデアは、2 番目のファイルに、サーバー名と追加情報を含む複数の行がそれぞれに含まれているということです。

したがって、例の名前「server01」の出力は

server01
server01
server01

もちろん、両方のファイルに存在する名前ごとに、出力xlsファイルに1回だけ入れたいです。

これまでのプログラムは次のとおりです。

#!/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();

それを変更する方法はありますか?

4

1 に答える 1

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;
    }
}
于 2012-04-12T07:12:14.923 に答える