Я запускаю фоновый скрипт, который включает чтение файла журнала каждые 5 минут в таком формате
21:25:57 [INFO] event from 5 minutes ago
21:26:54 [INFO] potentially relevant event
21:28:26 [INFO] some event
21:30:06 [INFO] another event
За исключением того, что я хочу смотреть только на те строки, которые были напечатаны за последние 5 минут. По сути, мне нужно найти строку, в которой date -s "$logdate" +%s <= date -d "5 min ago" +%s
ближе всего к концу файла, и игнорировать все строки перед ним.
К сожалению, в метках времени нет дат, поэтому это усложняет задачу, поскольку метки времени будут повторяться каждый день, если я не перезапущу сервер и не сброшу журнал (я бы предпочел этого не делать). Использование tac
вместо cat
может быть более эффективным, поскольку меня интересуют только строки, начинающиеся с конца файла.
1 ответ
Если у вас есть дата GNU:
$ date +%T
04:56:32
$ date -d "5 min ago" +%T
04:51:45
И вы можете:
tac logfile | awk -v start=$(date -d "5 min ago" +%T) '$1 < start {exit} 1' | tac
awk
больше, здесь он неплохо сработал.
Похожие вопросы
Новые вопросы
bash
Этот тег предназначен для вопросов о сценариях, написанных для командной оболочки Bash. Сценарии оболочки с синтаксисом или другими ошибками, пожалуйста, проверьте их на https://shellcheck.net, прежде чем публиковать здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут актуальны на Unix & Linux Stack Exchange или Super User, чем на Stack Overflow.
tac
многообещающая.