Учитывая то, что вам нужно сделать, это действительно не так сложно, и гораздо эффективнее выполнить обработку даты путем преобразования в строки и сравнения.
Вот частичное решение, которое использует ассоциативные массивы для преобразования значения месяца в число. Затем вы полагаетесь на спецификатор формата% 02d, чтобы обеспечить 2 цифры. Вы можете переформатировать значение dateTime с помощью '.' И т. Д. Или оставить двоеточия в часах: мин: сек, если вам действительно нужна читабельность.
Формат YYYYMMDD очень помогает в решении подобных проблем, поскольку LT, GT, EQ работают без какого-либо дополнительного форматирования.
echo "178.221.138.12 Mon May 02 08:59:23 GMT 2011" \
| awk 'BEGIN {
mons["Jan"]=1 ; mons["Feb"]=2; mons["Mar"]=3
mons["Apr"]=4 ; mons["May"]=5; mons["Jun"]=6
mons["Jul"]=7 ; mons["Aug"]=8; mons["Sep"]=9
mons["Oct"]=10 ; mons["Nov"]=11; mons["Dec"]=12
}
{
# 178.221.138.12 Mon May 02 08:59:23 GMT 2011
printf("dateTime=%04d%02d%02d%02d%02d%02d\n",
$NF, mons[$3], $4, substr($5,1,2), substr($5,4,2), substr($5,7,2) )
} ' -v StartTime=20110105235959
Параметр -v StartTime иллюстрирует, как передать (и соответствующий формат) ваше значение starTime.
Надеюсь, это поможет.