#!/usr/bin/perl # count.pl - tally various things in an irc log file # Eric Lease Morgan # February 12, 2011 - first cut # configure use constant DB => './irclog.db'; # require use strict; # sanity check my $output = $ARGV[ 0 ]; if ( ! $output ) { &usage } # intialize my %commands = (); my %decreases = (); my %increases = (); my %names = (); my %urls = (); # open and loop through the log open INPUT, ' < ' . DB or die "Can't open " . DB . ": $!\n"; while ( ) { # clean and parse chop; my ( $datestamp, $name, $text ) = split /\t/, $_; # clean and tally names $name =~ s/_+//g; $names{ $name }++; # commands if ( $text =~ /@.* / ) { $text =~ /(@.*?) /; $commands{ $1 }++; } # urls if ( $text =~ /http:\/\/.*/ ) { $text =~ /(http:\/\/.*)/; my ( $url, $stuff ) = split / /, $1; $url =~ s/;$//; $url =~ s/,$//; $url =~ s/>$//; $url =~ s/"$//; $urls{ $url }++; } # increases if ( $text =~ /\w+\+\+/ ) { $text =~ /(\w+\+\+)/; $increases{ $1 }++; } # decreases if ( $text =~ /\w+--/ ) { $text =~ /(\w+--)/; $decreases{ $1 }++; } } # clean up close INPUT; # output names if ( $output eq 'n' ) { foreach ( sort { $names{ $b } <=> $names { $a } } keys %names ) { print $names{ $_ } . "\t$_\n" } } # increases elsif ( $output eq 'i' ) { foreach ( sort { $increases{ $b } <=> $increases { $a } } keys %increases ) { print $increases{ $_ } . "\t$_\n" } } # decreases elsif ( $output eq 'd' ) { foreach ( sort { $decreases{ $b } <=> $decreases { $a } } keys %decreases ) { print $decreases{ $_ } . "\t$_\n" } } # decreases elsif ( $output eq 'u' ) { foreach ( sort { $urls{ $b } <=> $urls { $a } } keys %urls ) { print $urls{ $_ } . "\t$_\n" } } # commands elsif ( $output eq 'c' ) { foreach ( sort { $commands{ $b } <=> $commands { $a } } keys %commands ) { print $commands{ $_ } . "\t$_\n" } } # error else { &usage } # done exit; sub usage { print "Usage: $0 \n"; exit; }