Dear Ranjith,

> Hi all,
>  The function of this script is used to print the
>  aleurier_access.log (apache log file) file content exactly.

[snip]

> What i like to do is
> How to print individual set values?
> for eg,
> If I want to print the %h (remote host id) set values alone?
> I want to sort %h set values?
> Repeated host id to printed only once and also other unique host
> ids values and store %h values in a database?

I don't know if I understood your requirement/query correctly.
Assuming that you want to parse access_log file such that for every
host entry in the access_log, you want to group corresponding fields
together as a set of records, the code could be something like
below:

# --------------8<---------------------------------8<---------------
require 'rubygems'
require 'apachelogregex'
require 'pp'

format = '%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"'
parser = ApacheLogRegex.new(format)
access_log = Hash.new
# Creating a hash of an array of hashes!
# Can be simplified based on your actual requirement.

File.readlines('aleurier_access.log').collect do |line|
  record = parser.parse(line)
  # The code below does the actual job. Can be a one-liner
  # if you know ternary operators or maybe if expression.
  if access_log.key? record["%h"]
     access_log[record["%h"]] << record
  else
     access_log[record["%h"]] = Array.new
  end
end

# Now let's test some!
puts access_log.keys
while true
    print "Enter ip address: "
    ipaddr = gets.chomp
    puts "-" * 40
    pp access_log[ipaddr]
    puts "-" * 40
end
# --------------8<---------------------------------8<---------------

Is this what you wanted ?

--
Chandrashekar Babu.,
http://www.chandrashekar.info/
http://www.slashprog..com/
_______________________________________________
ILUGC Mailing List:
http://www.ae.iitm.ac.in/mailman/listinfo/ilugc

Reply via email to