我正在尝试读取Linux服务器日志文件上可用的最后一个小时的日志。我已经尝试了以下命令,但它对我不起作用。
命令1:
START=`date --date='now-60 minutes' '+%Y-%m-%d %H:%M'`
END=`date --date='now' '+%Y-%m-%d %H:%M'`
awk "/$START/, /$END/" filepath
命令2:
grep "^$(date -d -1hour +'%Y-%m-%d %H')" filepath
命令3:
awk -vdate=$(date -d "60 minutes ago" '+%Y-%m-%d%H:%M:%S') '$1$2 >= date { print }' filepath
解决此查询的任何建议/输入。
示例日志
[01/01/21 22:40:26:088 IST] 0000002a SystemOut O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:26:166 IST] 0000002a SystemOut O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:27:360 IST] 0000002a SystemOut O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:27:475 IST] 0000002a SystemOut O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:27:668 IST] 0000002a SystemOut O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:28:211 IST] 0000002a SystemOut O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:29:447 IST] 00000040 SystemOut O [WebContainer : 4 ] ERROR bla bla bla
[01/01/21 22:40:31:328 IST] 00000036 SystemOut O [WebContainer : 3 ] ERROR bla bla bla
您正试图将一种格式的日期(%Y-%m-%d
(与日志文件中完全不同的格式(%m/%d/%y
(进行比较。试试这个:
awk -v d="$(date --date='now-60 minutes' '+%y%m%d%H%M')" -F'[[/ :]' '($4$2$3$5$6) > d' file
我假设:
01/01
在您的示例中的日期是月/日,而不是日/月-如果我猜错了,请交换2美元和3美元- 输入文件中的时间总是2位数字,例如
09
而不是9
——如果这是错误的,那么使用sprintf()
来生成用于比较的时间戳,而不仅仅是连接值 - 您在与日志文件日期相同的时区执行此操作——如果错误,请在运行脚本之前设置
TZ=...