#!/usr/bin/perl -w use strict; use Spreadsheet::WriteExcel; # don't need this here, but might in real script to get cell addresses #use Spreadsheet::WriteExcel::Utility; my $workbook=Spreadsheet::WriteExcel->new("test-counts.xls"); my $files_worksheet=$workbook->addworksheet("Files"); $files_worksheet->write(0,0,"Filename"); $files_worksheet->write(0,1,"ErrorType"); my %errorCodes; my %errorCodesByFile; my ($row, $col); # let's assume there's an input file, with data like # one.cxx 588 # one.cxx 588 # ... open(INFILE,") { my ($file, $err)=split; $files_worksheet->write($row,0,$file); $files_worksheet->write($row,1,$err); # we need the list of ALL the errors, to get column headings $errorCodes{$err}++; # we need to COUNT how often each error occurs in each file $errorCodesByFile{$file}->{$err}++; ++$row; } close(INFILE); my $summ_worksheet=$workbook->addworksheet("Summary"); $summ_worksheet->write(0,0,"fileName"); $summ_worksheet->write(0,1,"Error"); my @sortedCodes = sort keys %errorCodes; $col=2; foreach my $errCode(@sortedCodes) { $summ_worksheet->write(0,$col++,$errCode); } $row=1; foreach my $filename(sort keys %errorCodesByFile) { $summ_worksheet->write($row,0,$fileName); $col=2; foreach my $errCode(@sortedCodes) { # set to blank if value 0 or not defined my $count=$errorCodesByFile{$file}->{$errCode} || ''; $summ_worksheet->write($row,$col++,$count); } ++$row; }