Извлечь последние 5 минут из файла журнала с помощью оболочки

Извлечь последние 5 минут из файла журнала с помощью оболочки

Мне нужно извлечь последние 5 минут из файла журнала. Вот мой файл журнала

[2022-02-08 13:26:21:352] [ERROR] [iBus Connection LifeCycle - CCMHost_DummyDevice_Backup_AD2::Management:::NRMCMO_FLPROD2] [com.example]
  + Message: Could not create an administered connection factory: Java heap space
  + Throwable: java.lang.OutOfMemoryError: Java heap space

[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
  + Message: Unable to Initialize Connection
  + Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
  + Message: Unable to Initialize Connection
  + Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-01017, TNS:listener does not currently know of SID given in connect descriptor


[2022-02-08 15:05:04:056] [ERROR] [JMS Session Delivery Thread - The user's password has expired.] [com.example]

Я пробовал использовать это, но не работает

awk -v d1="$(date --date="2 hour ago" "+%Y-%m-%d %H:%M:%S:%3N")" -v d2="$(date "+%Y-%m-%d %H:%M:%S:%3N")" '$0 > d1 && $0 < d2 || $0 ~ d2' filelog.log

Любая помощь будет оценена по достоинству.

решение1

Это не работало, потому что первый символ в строке журнала — квадратная скобка, и это портит ваше сравнение. Если вы извлечете только часть даты из строки журнала для сравнения, это должно работать. Обратите внимание, что я жестко кодирую даты здесь, чтобы я мог использовать ваши строки примеров.

awk -v d1="2022-02-08 15:04:00" -v d2="2022-02-08 15:08:00" 'd1 < substr($0,2,19) && substr($0,2,19) < d2 || substr($0,2,19) ~ d2' filelog.log

На самом деле вы могли бы упростить свою команду; поскольку вас интересуют только времена, более поздние, чем 2 часа назад, вы могли бы вообще убрать "d2". Если вас интересуют только строки, в которых дата действительно появляется, вы можете предотвратить искусственные совпадения с другими строками, указав, что совпадающие строки должны начинаться с "[", как это делают ваши строки с датой.

awk -v d1="$(date --date="2 hour ago" "+%Y-%m-%d %H:%M:%S:%3N")" '/^\[/ && d1 < substr($0,2,19)' filelog.log

Если вас также интересуют дополнительные строки под каждой соответствующей меткой даты, и если между каждой допустимой записью строки действительно есть пустые строки, вы можете использовать это для изменения разделителя записей, чтобы он выбирал дополнительную информацию и отменял проверку «[», поскольку другие строки являются частью той же записи, а не отдельными строками, подлежащими фильтрации.

root@2ec99a4edaa9:/tmp# awk -v RS= -v d1="2022-02-08 15:04:00" 'd1 < substr($0,2,19)' filelog.log
[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
  + Message: Unable to Initialize Connection
  + Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
  + Message: Unable to Initialize Connection
  + Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-01017, TNS:listener does not currently know of SID given in connect descriptor
[2022-02-08 15:05:04:056] [ERROR] [JMS Session Delivery Thread - The user's password has expired.] [com.example]

Наконец, если вы хотите сохранить пустые строки для удобства чтения в выводе, вы можете просто добавить их -v ORS="\n\n"в свой оператор awk.

В целом ваша измененная команда будет выглядеть так:

awk -v RS= -v ORS="\n\n" -v d1="$(date --date="2 hour ago" "+%Y-%m-%d %H:%M:%S:%3N")" 'd1 < substr($0,2,19)' filelog.log

Связанный контент