Krotkie i dziala :P
Plik wejsciowy ma u mnie format (dodalem linie aby miec niektore wyniki x2 a inne x1):
Kod:
12:02:12.122 safdjaismdasdaddadasdsd,dasdsd,sadad,asd,da,s ParametrA time=1234milsec
12:03:12.122 safdjaismdasdaddadasdsd,dasdsd,sadad,asd,da,s ParametrB time=1234milsec
12:04:12.122 safdjaismdasdaddadasdsd,dasdsd,sadad,asd,da,s ParametrC time=1234milsec
12:05:12.122 safdjaismdasdaddadasdsd,dasdsd,sadad,asd,da,s ParametrD time=1234milsec
12:03:12.122 safdjaismdasdaddadasdsd,dasdsd,sadad,asd,da,s ParametrB time=1234milsec
12:04:12.122 safdjaismdasdaddadasdsd,dasdsd,sadad,asd,da,s ParametrC time=123milsec
12:05:12.122 safdjaismdasdaddadasdsd,dasdsd,sadad,asd,da,s ParametrD time=1234milsec
Teraz skrypt odpalasz podajac nazwe pliku wejsciowego jako parametr (skrypt.pl plik_wejsciowy) i dostajesz w wyniku pliki Parametr*-hist.csv
Zakladam ze parametry nazywaja sie dokladnie ParametrA, ParametrB, itd a nie jakos inaczej - po prostu tak bylo mi prosciej :-P ale jakby cos to zmienisz sobie regex. Kod mozna napisac krocej ale celowo zostawiam go tak jak jest. Do zliczania uzywam hasha hashy, czyli hash zawierajacy jako wartosc nastepny hash :-)
Kod:
#!/usr/bin/perl
use strict;
# hash hashy...
my %wyniki;
# czytamy dane
open (FH, $ARGV[0]) || die "Nie moge odczytac $ARGV[0]: $!\n";
while (<FH>) {
next if !/\w/;
/(Parametr.*?)\s+time=(\d+)/;
$wyniki{$1}{$2}++;
}
close (FH);
# zrzucamy wyniki do CSV
foreach my $param (keys %wyniki) {
open (OUT, "> $param-hist.out") || die "Nie moge otworzyc $param-hist.csv do zapisu: $!\n";
print OUT "CZAS,WYSTAPIENIA\n";
foreach my $mils (sort keys %{$wyniki{$param}}) {
print OUT "$mils,$wyniki{$param}{$mils}\n";
}
close OUT;
}
Mowiac krotko struktura wynikow jest taka:
Kod:
%wyniki = {
'ParametrB' => {
'1234' => 2
},
'ParametrD' => {
'1234' => 2
},
'ParametrA' => {
'1234' => 1
},
'ParametrC' => {
'123' => 1,
'1234' => 1
}
};
Tak wlasnie wyglada hash hashy... i dla zainteresowanych... aby to zobaczyc do kodu wystarczy dodac:
Kod:
use Data::Dumper;
print Dumper \%wyniki; # celowo \ aby przekazac odwolanie do zmiennej
Czas pisania z testowaniem <5min... milej zabawy
EDIT:
Dane wyjsciowe masz posortowane wg czasow w plikach .CSV wiec wykres machnij sobie w jakims arkuszu kalkulacyjnym. Zwyczajnie nie chce mi sie bawic w rysowanie wykresow w perlu, choc nie jest to trudne...