请您指导我如何从日志文件中获取最近30分钟的条目。我已经尝试了下面的方法,但是没有用。
sed '/$(date -d "-30 minutes" +'%Y-%m-%d %H:%M')/,/$(date +'%Y-%m-%d %H:%M')/! d' Time_Taken_log.log
PFB我的日志文件中的条目示例
2019-03-07 15:32:01.425: 1012
2019-03-07 15:32:01.456: 886
2019-03-07 15:32:01.484: 729
2019-03-07 15:32:01.505: 747
2019-03-07 15:32:01.527: 716
2019-03-07 15:32:01.529: 919
2019-03-07 15:32:01.531: 917
2019-03-07 15:32:01.584: 964
2019-03-07 15:32:01.599: 791
2019-03-07 15:32:01.637: 836
在此非常感谢您的帮助。预先感谢。
答案 0 :(得分:1)
文件格式非常容易比较。
start=$(date -d "-30 minutes" +'%Y-%m-%d %H:%M:%S')
awk -v s="$start" 's<$0' file.log
答案 1 :(得分:1)
对于大文件而言,最有效的方法是使用tac
从头开始读取,并在看到比目标还早的日期时停止:
awk -F: -v stop_when_before="$(date +'%Y-%m-%d %H:%M:%S' -d '-30 minutes')" '
$1 < stop_when_before { exit }
1 { print }
' < <(tac Time_Taken_log.log)
如果您只关心50MB的最新内容,则没有理由读取20GB文件中的前19.95GB。
如果您希望内容按其原始顺序排列,请将awk
的输出通过管道传递回tac
(尽管我个人建议不要这样做,这是令人信服的原因; tac
廉价读取一个可以直接跳到末尾的可搜索文件,但是从管道读取它必须将所有内容一直缓存到末尾,然后才能生成任何输出)。