From: Ammar Ali Date: 2011-11-09T10:36:44+09:00 Subject: Re: Parsing data with ruby On Wed, Nov 9, 2011 at 12:49 AM, Ronald Craft wrote: > Peter Hickman wrote in post #1030933: >> Well this is a bit of a hack but just to simply parse the lines you >> could use: >> >> a = "10,25,40,55 * * * * /some/cron/here > /dev/null 2>&1\n30 */4 * * >> * /some/cron/here" >> >> a.split(/\n/).each do |line| >>   if line =~ /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(.*)$/ >>     output = Array.new >>     output << $6 >>     output << "?" >>     output << ($1 == "*" ? 'N' : 'Y') >>     output << ($2 == "*" ? 'N' : 'Y') >>     output << ($3 == "*" ? 'N' : 'Y') >>     output << ($4 == "*" ? 'N' : 'Y') >>     output << ($5 == "*" ? 'N' : 'Y') >> >>     p output >>   end >> end >> >> Which will output: >> >> ["/some/cron/here > /dev/null 2>&1", "?", "Y", "N", "N", "N", "N"] >> ["/some/cron/here", "?", "Y", "Y", "N", "N", "N"] >> >> Note that I left the '?' for the number of servers as that is your >> problem - Think of it as an exercise for the reader :) >> >> Also you might also need to match the Paul Vixie extensions for cron >> such as @hourly and @daily > > Thanks for the reply. This looks like a step in the right direction. The > only problem that I can think of is that the cron jobs aren't always > going to have the same time, so I don't think having the " a = > "10,25,40,55 * * * *" portion would work, as it would probably only find > one entry of that since the times the crons execute are always going to > vary. split takes a second argument that specifies a limit. It will greatly simplify parsing the lines in this case. >> line.split(/ /, 6) => ["10,25,40,55", "*", "*", "*", "*", "/some/cron/here > /dev/null 2>&1"] Regards, Ammar