Solved

How do i print the date and time of specific lines that contain a certain key word using Ruby?

Posted on 2013-10-28
1
302 Views
Last Modified: 2013-10-28
In other words i need Ruby to read from the attached log file and report the dates and time that has the keyword MAY_DAY. I am able to print out all the information but I don't have the slightest idea on how to print out the specific entries.

I am an uber noob and find ruby extremely difficult to understand. I appreciate all help and respectful criticism. Thanks

test.txt

Oct 15 12:54:01 WHERE IS THE LOVIN MAY_DAY
Oct 16 23:15:44 WHAT THE HECK CAN I DO ABOUT IT HUMP_DAY
Oct 16 14:16:09 I LOVE MY BABY GIRL MAY_DAY
Oct 16 08:25:18 CAN WAIT UNTIL MY BABY RECOVERS CRYSTAL_WIFE
Oct 18 17:48:38 I HOPE HE STOP MESSING WITH THESE FOOLISH CHILDREN TONY_SMITH
Oct 19 05:17:58 GAME TIME GO HEAD AND GET ME MAY_DAY
Oct 20 10:23:33 GAMESTOP IS WHERE ITS AT GAME_DAY
Oct 21 03:54:27 WHAT IS GOING ON WITH MY LUNCH HUNGRY_MAN
RestartMonitor.rb

class RestartMonitor    

   counter = 1
   begin
      file = File.new("test.txt", "r")
      while (line = file.gets)
         puts "#{counter}: #{line}"
         counter = counter + 1
      end

 end


When i run the file i get the following results:

Oct 15 12:54:01 WHERE IS THE LOVIN MAY_DAY
Oct 16 23:15:44 WHAT THE HECK CAN I DO ABOUT IT HUMP_DAY
Oct 16 14:16:09 I LOVE MY BABY GIRL MAY_DAY
Oct 16 08:25:18 CAN WAIT UNTIL MY BABY RECOVERS CRYSTAL_WIFE
Oct 18 17:48:38 I HOPE HE STOP MESSING WITH THESE FOOLISH CHILDREN TONY_SMITH
Oct 19 05:17:58 GAME TIME GO HEAD AND GET ME MAY_DAY
Oct 20 10:23:33 GAMESTOP IS WHERE ITS AT GAME_DAY
Oct 21 03:54:27 WHAT IS GOING ON WITH MY LUNCH HUNGRY_MAN

When i run the code i would like it to only display the date and times that have the keyworld MAY_DAY. so the output should be:

Oct 15 12:54:01
Oct 16 14:16:09
Oct 19 05:17:58
0
Comment
Question by:djphillovesyou
1 Comment
 
LVL 75

Accepted Solution

by:
käµfm³d   👽 earned 500 total points
ID: 39607119
You'll want Ruby's version of a substring search:

if line['MAY_DAY']

Open in new window


And then to parse the date out, you can use the same functionality, but pass a regex instead:

line[/[A-Za-z]+ +\d+ +\d+:\d+:\d+/]

Open in new window


The regex meaning:

/         - Pattern delimiter
[A-Za-z]  - One or more ( + ) of any letter ( [A-Za-z] )
 +        - One or more ( + ) spaces
\d+       - One or more ( + ) of any digit ( \d )
 +        - One or more ( + ) spaces
\d+       - One or more ( + ) of any digit ( \d )
:         - Literal colon
\d+       - One or more ( + ) of any digit ( \d )
:         - Literal colon
\d+       - One or more ( + ) of any digit ( \d )
/         - Pattern delimiter

Open in new window


Putting it all together:

class RestartMonitor
    counter = 1
    
    begin
        file = File.new("test.txt", "r")
        while (line = file.gets)
            if line['MAY_DAY']
                date = line[/\w+ +\d+ +\d+:\d+:\d+/]
                puts "#{counter}: #{date}"
                counter = counter + 1
            end        
        end
    end
end

Open in new window


Screenshot
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Converting Ruby on Rails Project for use as HTML file(s) 2 484
What is ::IGNORECASE in Ruby 2 473
Rails Clear Textarea 1 603
return files 6 111
I recently rediscovered rails when I needed a holiday project and decided to build a management dashboard for the company where I work.  With it being a project done in my free time, I could focus my time on learning the basics rather than trying to…
Article by: narshlob
If you've ever programmed in Ruby and have come across either a proc or a lambda, you might have been wondering what the difference is between the two and when you would use one over the other. This article will try to explain the difference between…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

679 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question