为包含一系列数据的行提供一系列文件名

时间:2014-02-27 21:56:14

标签: bash grep debian

假设我在目录中有日志文件,包含日期文件名,例如201401222014012320140124等等。

在这些日志文件中,每次我发布到日志文件时,我都会有一个日期时间字符串,后跟数据,例如:

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开头的任何其他行:

有什么建议吗?

编辑:我已决定从文件系统更改为数据库系统,所以我仍然希望找到答案,对于其他可能需要某天类似的人,这个问题现在可以关闭,如果你想要的话

2 个答案:

答案 0 :(得分:0)

这似乎对我有用:

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

答案 1 :(得分:0)

我认为,您应该将问题分成几个不太复杂的部分。 “我如何获取名称在范围内的文件”,“我如何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之间获取字符串并清除它们。

并且,是的,您应该确保具有您的日期名称的文件存在并且如果不存在则获得最接近的文件。如何做到这可能是你另外一个问题。