Skip to content

Instantly share code, notes, and snippets.

@kuniyoshi
Created December 21, 2012 13:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kuniyoshi/4352774 to your computer and use it in GitHub Desktop.
Save kuniyoshi/4352774 to your computer and use it in GitHub Desktop.
NCSA log parser. i wrote like this frequently.
#!/usr/bin/perl
use utf8;
use strict;
use warnings;
use open qw( :utf8 :std );
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Indent = 0;
my @HEADERS = qw( ip id name d1 d2 method url version status size referer ua );
while ( <> ) {
chomp( my $line = $_ );
my %log = parse( $line );
print Dumper( \%log ), "\n";
}
exit;
sub parse {
my $line = shift;
my %log;
@log{ @HEADERS } = split m{ }, $line, scalar @HEADERS;
$log{date} = join q{ }, delete @log{ qw( d1 d2 ) };
$log{method} =~ s{\A " }{}msx;
$log{version} =~ s{ " \z}{}msx;
$log{referer} =~ s{\A " }{}msx;
$log{referer} =~ s{ " \z}{}msx;
$log{ua} =~ s{\A " }{}msx;
$log{ua} =~ s{ " \z}{}msx;
$log{query} = join q{ }, @log{ qw( method url version ) };
return %log;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment