Grep 查找文件中超过 14 天的日期

Grep 查找文件中超过 14 天的日期

我正在尝试找到一种方法来 grep 文件中的消息数量早于14 days并且具有返回结果数的值

以今天的日期 为例20160616$grep 'Put Date' filename

Put Date     :'20160425'
Put Date     :'20160501'
Put Date     :'20160514'
Put Date     :'20160609'
Put Date     :'20160610'
Put Date     :'20160616'

结果应显示以下内容已超过 14 天,并且将return 3

Put Date     :'20160226'
Put Date     :'20160501'
Put Date     :'20160514'

答案1

你可以使用:

awk -v threshold=$(date "--date=$(date) -14 day" +%Y%m%d) -F "'" '$2 < threshold' filename | wc -l

这类似于中的解决方案这个帖子只不过日期是内联计算的。

笔记: filename应替换为名称你的文件

另外,请记住要小心边界日期的规则(检查边界条件)。

答案2

awk已发布解决方案,因此我将做一个基于grep- 的解决方案。

首先,创建一个文件,其中包含您不想看到的日期,每行一个。这只有 15 个条目,因此不需要太多处理并且速度很快。以下需要 GNU date,它在我的 [BSD] 系统上安装为gdate

i=0
while (( i < 15 )); do
    gdate -d "now -$(( i++ )) days" +"%Y%m%d"
done >dates_to_skip

完成后,您可以简单地将其用作以下内容的过滤器fgrep -v

fgrep -v -f dates_to_skip mydata

相关内容