Если вы предпочитаете AWK ...
awk -f logstrip.awk in.log > out.log
где logstrip.awk выглядит примерно так:
# *** Simple AWK script to delete lines from log file ***
# Rule: keep all lines except these that have their 2nd
# field equal to "D" and their 7th field more than
# current date time
BEGIN {
FS = "!"; #delimiter
stopDate = systime();
# stopDate = 47001231000001; for test purposes
deletedLineCtr = 0; #diagnostics counter, unused at this time
}
{
if (match($2, "D") && ($7 < stopDate) ) {
deletedLineCtr++;
}
else
print $0
}
должен сделать трюк.
Внимание, ваше поле # 7 содержит нечетный формат даты. Я думаю, что я узнаю недавнее значение эпохи (123 ...), но ему предшествует 4 явно не связанных цифры. Их можно легко удалить перед сравнением с StopDate