Grep a log file starting from a specific time to the end of file

I have a log file which have a date and time at the start of every line.

I need to search the log file starting from a specific time to the end of file.

For example:
Starting point: July 29 2018 21:00:00
End point : end of file

My concern is what if the pattern of `July 29 2018 21:00:00` does not exist, I still want to get the lines between for example `July 29 2018 21:05:11` since this is still beyond `July 29 2018 21:00:00`.

Since you did not specify your environment, I assume Linux/Bash.

You may convert the timestamp to epoch(= time in seconds since 1.1.1970) and print only the lines where the value is higher:

start_date="July 29 2018 21:00:00"

start_seconds="$(date +"%s" --date="$start_date")"
while read month day year time rest;do 

   current_line_seconds=$(date +"%s" --date="$month $day $year $time")
   [ $current_line_seconds -gt $start_seconds ] && \
       echo "$month $day $year $time $rest"; 
done <your_data_file.txt
 

Performance of this solution is only suited for small file sizes since one process is spawned for every line.

I'm not sure if this is what you meant but I am using AIX 7.1. I am getting the error below:
date: 0551-402 Invalid character in date/time specification.
Usage: date [-u] [+"Field Descriptors"]

I think it has something to do with the --date option.

This does not work in AIX. It's an older date implementation there.

------ Post updated at 08:47 PM ------

I have some awk script for you, which you will need to adapt to your needs. Maybe a starting point for you to learn to get aquainted with GNU awk.

#!/usr/bin/gawk -f
#
#       Usage:
#
#       ./log_output_from "timespec" <input_file.txt
#
#               timespec is: "YYYY MM DD HH MM SS"
#
#       Example: 
#
#       ./log_output_from "2018 01 01 16 00 00" <input_file.txt
#
#
#
#
#       Sample Input data
#
#       Jul 2018 16:17:30 Some text here
#


function epoch(year,month,day,hour,min,sec) {

         return mktime(year" "month" "day" "hour" "min" "sec) 

}

BEGIN {
        months_str=("Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec")
        split(months_str, month_names, "_");
        for(name in month_names) {
                i=i+1
                month_number[month_names]=i
        }
        start_seconds=mktime(start_time)

 }
# if the time is reached, no more checking, just print every line

 (time_reached==1) {
        print($0)
        next
}
{
        split($4,mytime,":")
        current_line_seconds=epoch($3,month_number[$1],$2,mytime[1],mytime[2],mytime[3]) 
        if(current_line_seconds > start_seconds) {
                time_reached = 1
                print($0)
        }
}