Hi,
Further to my posts 48450 & 48452, I have modified the perl script. Here it is:
----------------------
#!/usr/bin/perl
###use strict;
use Getopt::Long;
use Time::Local;
my $file="access_log_modified";
my $begin_time = "";
my $end_time;
my @visual_pages = ();
my @final_visual_pages = ();
my %increment = ();
my ($datetime, $get_post, $Day, $Month, $Year, $Hour, $Minute, $Second);
my $interval = 60; #An interval of 1 minute
count_recs();
sub count_recs {
open (INFILE, "<$file") || die "Cannot read from $file";
WHILELOOP: while (<INFILE>) {
($datetime,$get_post) = (split / /) [3,6];
$datetime =~ s/\[//;
($Day,$Month,$Year,$Hour,$Minute,$Second)= $datetime
=~m#^(\d\d)/(\w\w\w)/(\d\d\d\d):(\d\d):(\d\d):(\d\d)#;
next WHILELOOP if ($get_post =~ /\.js$/ || $get_post =~ /\.gif$/ || $get_post =~
/\.css$/);
unless ($begin_time) {
$begin_time = $datetime;
}
push (@dates, $datetime);
} #outer while
###The code below is faster compared to the grep one
foreach $dateproc (@dates) {
$increment{$dateproc}++;
}
foreach $dateproc (sort keys %increment) {
push (@{$processed_visual_pages{$dateproc}}, $increment{$dateproc});
###This prints the date timestamp and the number of occurrences of this
###record.
print "$dateproc @{$processed_visual_pages{$dateproc}}\n";
}
close(INFILE);
}
-----------------
The output I get is: The first column is the timestamps and the second column is the
no. of occurrences of that record.
25/Apr/2003:13:54:02 3
25/Apr/2003:13:54:19 2
25/Apr/2003:13:54:22 4
25/Apr/2003:13:54:34 3
25/Apr/2003:13:54:38 5
25/Apr/2003:13:54:41 3
25/Apr/2003:13:54:43 6
25/Apr/2003:13:54:44 3
25/Apr/2003:13:54:46 5
25/Apr/2003:13:54:47 2
25/Apr/2003:13:54:48 3
25/Apr/2003:13:54:50 7
25/Apr/2003:13:54:51 4
25/Apr/2003:13:54:53 2
25/Apr/2003:13:54:58 3
25/Apr/2003:13:55:01 2
25/Apr/2003:13:55:02 4
25/Apr/2003:13:55:05 5
25/Apr/2003:13:55:08 1
25/Apr/2003:13:55:14 3
25/Apr/2003:13:55:15 1
25/Apr/2003:13:56:13 6
25/Apr/2003:13:56:27 5
25/Apr/2003:13:56:35 4
25/Apr/2003:13:56:40 4
25/Apr/2003:13:56:45 1
25/Apr/2003:13:56:51 5
---------------------------------
I shall appreciate any ideas to calculate the average, min and max number for the
above starting with the first timestamp and for a range of say, 60 seconds.
The output would look like: (Since the 1 min interval starting from 13:54:02 is
13:55:02)
Time Average Min Max
25/Apr/2003:13:55:02 4.5 2 7
25/Apr/2003:13:56:13 3.5 1 6
This repeats for the next interval
A snippet of the input:
127.0.0.1 - - [15/Jun/2003:13:54:02 -0100] "GET /xxxx HTTP/1.1" 200 34906
127.0.0.1 - - [15/Jun/2003:13:54:02 -0100] "GET /xxxx HTTP/1.1" 200 34906
--------------
TIA
Anand
Ramprasad <[EMAIL PROTECTED]> wrote:
Anand Babu wrote:
> Hi all,
>
> I am new to this group. I need help regarding a perl script which
> parses the web log file, access_log.
>
Welcome , This is the most friendly list I have seen
> The format of the access_log is:
>
> 127.0.0.1 - - [15/Jun/2003:13:54:02 -0100] "GET /xxxx HTTP/1.1" 200
> 34906
>
> The goal is to
What do You expect ? Someone would write a full program for you to use ?
Someone might, but that way you will take a long time to do real perl
yourself
Best way to use a newsgroup is to write out a code yourself, If you
get stuck post what You have done and what is not working
You will get enough help here
You seem to have a fairly simple thing
A short algo will be
write a function that will convert a timestamp to a date_range_string
like
foo('15/Jun/2003:13:54:02')='15/Jun/2003:13:45:00-15/Jun/2003:14:00:00'
...
.. # Use a smaller string if you find this range string very long
..
Now read the file line by line
while(){
($x,$y,...$timestamp,....) = split; # Fill in the blanks later
$hash{foo($timestamp)}++;
}
Now %hash has got all info you need
Best of Luck
Ram
PS BTW Have a look at analog http://www.analog.cx/ before you write any
code yourself. You might find what you want
----------------------------------------------------------------
NETCORE SOLUTIONS *** Ph: +91 22 5662 8000 Fax: +91 22 5662 8134
MailServ: Email, IM, Proxy, Firewall, Anti-Virus, LDAP
Fleximail: Mail Storage, Management and Relaying
http://netcore.co.in
Emergic Freedom: Linux-based Thin Client-Thick Server Computing
http://www.emergic.com
BlogStreet: Top Blogs, Neighborhoods, Search and Utilities
http://www.blogstreet.com
Rajesh Jain's Weblog on Technology: http://www.emergic.org
----------------------------------------------------------------
---------------------------------
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!