我正在尝试找到一种方法来 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