使用awk在多个日志文件上基于日期和时间范围的日志文件搜索

时间:2012-12-20 15:34:03

标签: awk

我将日志文件分散在各种日志文件中(基本上它们设置为旋转日志)。我需要根据日期和时间提取日志。 示例日志文件具有以下内容。

2012.12.06 01:56:01 AUTH_SERVER.VMP_SYS [main - ] <INFO   > Loaded properties
2012.12.06 01:56:01 AUTH_SERVER.VMP_SYS [main - ] <INFO   > Initialized logging
2012.12.06 01:56:01 AUTH_SERVER.VMP_SYS [main - ] <CONFIG > Log levels = 

我试过下面的awk一个班轮......

awk -F - '"2012.12.06 01:56:01" < $1 && $1 <= "2012.12.08 04:30:00"' server.log   server.log.1

这打印出了所需要的东西......

但是想使用for循环来运行使用此文件在txt文件中提取的日志文件名列表

find server.log* -exec ls -lth {} \; | awk '{print $9}' > logfilenames.txt

我需要使用logfilenames内容(它具有该目录中日志文件的完整路径)作为for循环中的输入,以便从开始日期时间到结束日期时间搜索正确的日志文件名,并将其输出到不同的文件。

需要有关for循环的帮助才能完成此脚本。

1 个答案:

答案 0 :(得分:1)

为什么不做呢

awk -F - '"2012.12.06 01:56:01" < $1 && $1 <= "2012.12.08 04:30:00"' server.log*

另外,

cat `cat logfilenames.txt` 

将捕获logfilenames.txt中包含的所有文件。您可以在输出上运行awk。

你也可以使用xargs并将grep的输出重定向到awk。因此,要使用您提供的两个命令,可以执行以下操作:

find server.log* -exec ls -lth {} \; | awk '{print $9}' | xargs awk -F - '"2012.12.06 01:56:01" < $1 && $1 <= "2012.12.08 04:30:00"'