统计过去7天内文件中出现的次数



输入:

cat log.txt
2021-01-15 00:00:14: Installing hotfix ...
2021-01-15 00:02:07: Hotfix successfully installed!
2021-01-15 00:02:07: Finished
2021-02-07 00:00:14: Installing hotfix ...
2021-02-07 00:02:07: Hotfix successfully installed!
2021-02-07 00:02:07: Finished
2021-02-08 12:00:14: Started - Looking for available hotfixes ...
2021-02-08 12:00:14: Updating the hotfix list
2021-02-08 12:00:14: Finished

我想创建一个每日cronjob,用单词installed的出现次数更新file.txt,但仅限于最近7天。因此,每当我阅读file.txt时,它都应该包含过去7天内安装的修补程序的数量。

当前日期:2021-02-08

输出:

cat file.txt
1

我知道我可以使用grep -c "installed" log.txt来统计日志文件中的所有出现次数。但是,我如何修改它,使grep只统计过去7天的发生次数?日期总是会变化的,因为每天都会添加新行,所以我不能在grep脚本中提供固定的日期。此外,在给定的一天中可能会出现多个installed,所以我不能按行号进行grep。

awk -v d="$(date -d "7 days ago" "+%F")" '$1 > d && /installed/{c++}END{print c}' log.txt >file.txt

使用GNU核心实用程序中的date和普通bash:

#!/bin/bash
linecount=0
weekago=$(date -d "-7 days" +%F)
while read -r line; do
[[ $line > $weekago ]] && [[ $line = *installed* ]] && ((++linecount))
done < log.txt
echo $linecount > file.txt

相关内容

  • 没有找到相关文章

最新更新