我正在尝试grep两个日期范围之间的所有行,其中日期的格式如下: date_time.strftime("%Y%m%d%H%M"),因此假设介于201211150821 - 201211150824之间
我正在尝试编写一个脚本,其中包括查找这些日期之间的行:
cat <somepattern>*.log | **grep [201211150821 - 201211150824]** 我正在尝试找出unix中是否存在可以查找日期范围的内容。
我可以将日志中的日期转换为(从纪元开始),然后使用带有time1 - time2的常规grep,但这意味着读取每一行,提取时间值,然后转换它等等。
可能已经存在一些简单的东西,所以我可以指定日期/时间戳范围,就像向grep提供数字范围一样?
谢谢!
附言:我也可以传入类似2012111511(27|28|29|3-5)的模式,但这是我想要的特定范围,而且每次尝试不同的日期会很乏味,而且在运行时会变得更加棘手。
发布于 2012-11-22 04:02:40
使用awk。假设行中的第一个令牌是时间戳:
awk '
BEGIN { first=ARGV[1]; last=ARGV[2]; }
$1 > first && $1 < last { print; }
' 201211150821 201211150824发布于 2012-11-22 04:09:33
Perl解决方案:
perl -wne 'print if m/(?<!\d)(20\d{8})(?!\d)/
&& $1 >= 201211150821 && $1 <= 201211150824'(它查找以20开头的第一个十位整数,如果该整数在您感兴趣的范围内,则打印该行。如果它没有找到任何这样的整数,它会跳过该行。您可以对正则表达式进行调整,使其对有效月份和时间等有更多的限制。)
发布于 2012-11-22 04:30:20
您正在寻找有点晦涩的'csplit‘(上下文拆分)命令:
csplit '%201211150821%‘'/201211150824/’文件
将从文件中分离出第一个和第二个regexp之间的所有行。如果您的文件是按日期排序的(您说过您正在整理日志),那么它可能是最快和最短的。
https://stackoverflow.com/questions/13500902
复制相似问题