假设我在一个目录中有日志文件,带有日期文件名,例如20140122
、20140123
、20140124
等。
在这些日志文件中,每次我发布到日志文件时,我都有一个日期时间字符串,后跟数据,例如:
Thu Jan 23 02:04:48 EST 2014
bbb:Encryption of file: bbb has finished.
我想做的是 grep 以短语开头的行, bbb:
,在某个时间范围内,例如 01:00:00 - 03:00:00
并在与日期范围(例如 20140122-20140124
)匹配的文件中找到日期时间。
在此示例中,理想情况下,grep
将返回上述两行,以及与凌晨 1 点到 3 点之间时间条件匹配并以 bbb 开头的任何其他行:
有什么建议吗?
编辑:我决定从文件系统更改为数据库系统,所以虽然我仍然想找到答案,但对于有一天可能需要类似东西的其他人,如果你愿意,这个问题现在可以关闭。
似乎对我有用:
for file in 2014012{2..4}
do
echo
echo "<<<<-" $file "->>>>"
grep --no-group-separator -B1 -e '^bbb:' $file |
awk '$4>="01:00:00" && $4<="03:00:00"{print $0;getline;print $0}'
done
我认为,你应该把你的问题分成几个不太复杂的部分。"如何获取名称在范围内的文件","如何获取文件的grep内容"等。
抱歉,我不明白您对 grep 有什么抱怨,但您可以像这样找到您的文件。
mkdir a{1,2,3,4,5,6,7}; ls | sort -n | sed -n '/a3/,/a6/p'; rm -r a{1,2,3,4,5,6,7}
它创建示例目录,获取目录列表,将文件名排序为数字,获取 a3 和 a6 之间的字符串并清除所有内容。
而且,是的,您应该确保具有您的日期名称的文件存在,如果没有,则获取最接近的文件。这可能是您另一个单独的问题,如何做到这一点。