#!/usr/bin/perl # Extracts users sessions from the sorted log files # A user session defined as an hour or less. # Author: Ian Hickman use strict; use Time::Local; # read in first line and initialise some variables my (@field, %table); my ($time, $thistime, $lasttime, $lastuser); my %months=( "Jan", "00", "Feb", "01", "Mar", "02", "Apr", "03", "May", "04", "Jun", "05", "Jul", "06", "Aug", "07", "Sep", "08", "Oct", "09", "Nov", "10", "Dec", "11" ); $_=; @field=split; # remember last user $lastuser=$field[0]; # reformat time $_=$field[3]; my ($day, $monthtext, $year, $hour, $min, $sec)=/.(\d\d).(\w+).(\d{4}).(\d\d).(\d\d).(\d\d)/; my $month=$months{$monthtext}; $lasttime=timelocal( $sec, $min, $hour, $day, $month, $year ); # loop through all lines while( ){ @field=split; # reformat time $_=$field[3]; my ($day, $monthtext, $year, $hour, $min, $sec)=/.(\d\d).(\w+).(\d{4}).(\d\d).(\d\d).(\d\d)/; my $month=$months{$monthtext}; $thistime=timelocal( $sec, $min, $hour, $day, $month, $year ); $time=$thistime-$lasttime; # if same user session if( $field[0] eq $lastuser ){ # update lasttime if( $time>-1 ){ $table{$time}++; } $lasttime=$thistime; } else { # else user has finished session $lastuser=$field[0]; $lasttime=$thistime; } } my $times; foreach $times ( keys ( %table )){ print"$times\t$table{$times}\n"; }