从每日日志文件中每小时捕获一次日志

时间:2017-02-06 04:26:22

标签: linux bash shell

我有一个每日轮换的日志文件(比如主日志文件)我需要每小时捕获一次日志,然后存储每小时日志文件

实施例

当我在02/06/2017 03:41:35执行脚本命令时,我需要在02:41:35到03:41:35之间的日志

主日志文件

[02/06/2017][00:12:41][58162][3690952448][000000000000000000000000
[02/06/2017][00:12:41][58162][3690952448][000000000000000000000000
----------
[02/06/2017][03:41:35][57732][3674167040][000000000000000000000000
[02/06/2017][03:41:35][57732][3674167040][000000000000000000000000

每小时日志文件

[02/06/2017][02:41:35][58162][3690952448][000000000000000000000000
[02/06/2017][02:41:35][58162][3690952448][000000000000000000000000
----------
[02/06/2017][03:41:35][57732][3674167040][000000000000000000000000
[02/06/2017][03:41:35][57732][3674167040][000000000000000000000000

我执行了以下命令,但它没有捕获每小时日志而不是捕获所有日志

echo $(date -d'now-1 hours' +"[%d/%m/%Y][%H:%M:%S]") | cat mainlog.log 
echo $(date --date='1 hours ago' +"[%d/%m/%Y][%H:%M:%S]") | cat mainlog.log

1 个答案:

答案 0 :(得分:0)

您正在将echo的输出汇总到cat - 它不会过滤任何内容。 cat将忽略来自管道(stdin)的输入,因为它正在从文件mainlog.log读取。

您可以改为执行此操作(请注意日期格式的更改 - 我已移除%M%S部分):

grep -F "$(date -d'now-1 hours' +'[%d/%m/%Y][%H:]')" mainlog.log 
grep -F "$(date -d'1 hours ago' +'[%d/%m/%Y][%H:]')" mainlog.log

此处,grep将查找日志文件中date命令返回的字符串。