#!/usr/bin/env perl =begin Extract a complete user query history from sql log file Usage: zcat {src}.gz | perl $0 {username} OR perl $0 {username} < {src} =cut use strict; use warnings; use Data::Dumper; my $username = ( uc $ARGV[0] ) or die "zcat {src}.gz | perl $0 {username} OR perl $0 {username} < {src}"; my $T = $ARGV[1]; # optional time hh:mm(:ss) # can localise to minute if ($T) { my ($hr,$min,$sec) = split ':', $T; $sec ||= qr(\d{2}); $T = join ':', ($hr,$min,$sec); # re-create } my $regex = $T ? qr(\[\d{2}\-\d{2}\-\d{4} $T\]) : qr(\[\d{2}\-\d{2}\-\d{4} \d{2}:\d{2}:\d{2}\]); # warn $regex; open my $fh, '>', "./${username}.log" or die $!; my $active = 0; my %h; while () { # warn $_ if m/$regex/; next; $active = 0 if ( m/$regex/ and not m/$username/ ); # warn $run; # another username $active ||= 1 if ( m/$regex $username/ ); # warn $active; # flag to begin output $h{$1}++ if m/$regex (\w+)/; # user queries next unless $active; # print $_; print $fh $_; # print to output until next change of username } print "$_: $h{$_}\n" for sort { $h{$b} <=> $h{$a} } keys %h; my $total = 0; $total += $h{$_} for keys %h; print "Total queries: $total\n"; exit 0;