Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 317
  • Last Modified:

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

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
djphillovesyou
Asked:
djphillovesyou
1 Solution
 
käµfm³d 👽Commented:
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: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

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.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now