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
295 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 74

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

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

In Ruby, Call or invoke a API DLL library is easily via Win32API class, win32-api gem or other gems. For general DLL API call, there are quite a few references, some good tips list below: http://www.rubytips.org/2008/05/13/accessing-windows-api-fro…
Recently I spent hours debugging an issue in a Rails project where ActiveRecord was causing MySQL errors trying to create a User object of a class at the top level of a Single Table Inheritance model structure.  It turns out `.create` behaves differ…
This video discusses moving either the default database or any database to a new volume.
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…

760 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

Need Help in Real-Time?

Connect with top rated Experts

25 Experts available now in Live!

Get 1:1 Help Now