#!/usr/local/bin/perl $debug=''; $recs=0; $maxrecs=100000; while () { print if $debug; chop; if (/"\(client (.*)\)"/) { &getinfo($1); } last if $maxrecs && ($recs++ >= $maxrecs); } &showresult('Type', \%btypcount); &showresult('Version', \%bvercount); &showresult('Language', \%langcount); &showresult('OS', \%oscount); &showresult('Hardware', \%hardcount); &showresult('Browser', \%browcount); &showresult('Origin', \%origcount); #&showresult('Comment', \%cmntcount); sub showresult { local($label, $hashlist) = @_; foreach $item (sort keys %$hashlist) { printf "%-10s %-30s %8d\n", $label, $item, $$hashlist{$item}; } print "\n"; } sub getinfo { local($string) = @_; local($btype, $bversion, $info, $comment, $hardware, $browser, $origin); local($language, $os); $string =~ s/_/ /g; # change underlines to blanks if ($string =~ /\((.*)\)/) { $btype=$`; $info=$&; $comment=$'; $btype =~ s/\s+$//; # remove trailing blanks if ($btype =~ s|/(.*)$||) { $bversion=$1; } if ($bversion =~ s| \[(.*)\]||) { $language=$1; } $bversion =~ s/[^.\d].*$//; # only digits and dot allowed in version $btypcount{$btype}++ if $btype; $bvercount{$bversion}++ if $bversion; $langcount{$language}++ if $language; $info =~ s/^\(//; # remove parentheses $info =~ s/\)$//; @fields=split(/\s*;\s*/, $info); if ($#fields == 5) { # compatible; MSIE 3.02; Update a; AK; AOL 3.0; Windows 95 $hardware=@fields[0]; $browser =@fields[1]; $origin =@fields[4]; $os =@fields[5]; } elsif ($#fields == 4) { # compatible; MSIE 3.02; Update a; AOL 3.0; Windows 95 $hardware=@fields[0]; $browser =@fields[1]; $origin =@fields[3]; $os =@fields[4]; } elsif ($#fields == 3) { # compatible; MSIE 3.0; AOL 3.0; Windows 95 $hardware=@fields[0]; # compatible; MSIE 4.01; MSIECrawler; Windows 95 $browser =@fields[1]; # compatible; MSIE 4.01; Windows 95; ICONZ 4.0.1.2 if (@fields[2] =~ /^Win/) { $os =@fields[2]; $origin =@fields[3]; } else { $origin =@fields[2]; $os =@fields[3]; } } elsif ($#fields == 2) { if (@fields[0] =~ /^Win/) { # Win95; U ;Nav $os =@fields[0]; $browser =@fields[2]; } else { # compatible; MSIE 4.0; Windows 95 $hardware=@fields[0]; $browser =@fields[1]; $os =@fields[2]; } } elsif ($#fields == 1) { if (@fields[0] =~ /^Win/) { # WinNT; I $os =@fields[0]; $browser =@fields[1]; } else { # compatible; MSIE 2.0 $hardware=@fields[0]; $browser =@fields[1]; } } elsif ($#fields == 0) { $os =@fields[0]; } else { print "*** unrecognized: $info\n"; } $comment =~ s/^\s+//; # remove leading blanks $comment =~ s/:.*//; # remove everything after colon $hardcount{$hardware}++ if $hardware; $browcount{$browser}++ if $browser; $origcount{$origin}++ if $origin; $oscount{$os}++ if $os; $cmntcount{$comment}++ if $comment; if ($debug) { print "btype\t$btype \tversion\t$bversion \tlang\t$language\n"; print "hardwr\t$hardware \tbrowser\t$browser"; print " \torigin\t$origin" if $origin; print " \tos\t$os\n"; print "comment\t$comment\n" if $comment; } } return; }