Назад | Перейти на главную страницу

Sed - извлекать только части файла с определенными отметками времени

Я работаю с лог-файлами ежедневно. Я использовал sed для достижения своей цели по извлечению определенных строк данных между отметками времени. Например, я использую:

sed '/20150720 15:06:00/,/20150720 16:25:00/! d' logfile.log > /tmp/logpart.log

Однако это работает только тогда, когда метки времени действительно соответствуют строке в файле. Как я могу заставить sed работать с данными, которые мне нужны, без необходимости заходить в файл для получения фактических отметок времени? Например, в приведенном выше примере я просто хочу, чтобы все было между 15:00 и 16:30, независимо от того, есть ли в файле совпадающая отметка времени.

Поскольку ваши файлы журналов имеют хороший вкус лексикографически отсортированных меток времени, вы можете просто сравнивать строки с помощью awk, например:

awk 'substr($0,1,17)>="20150720 15:06:00" && substr($0,1,17)<="20150720 16:25:00"' <logfile.log

Я предположил, что ваша временная метка начинается с столбца 1 (нумерация от 1). Если нет, измените ,1, соответственно.