2012-12-20 65 views
1

我在各种日志文件(基本上它们设置为旋转日志)上分布有日志文件。我需要根据日期和时间提取日志.. 示例日志文件具有以下内容。使用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 

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

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

+0

好问题,但我们不能告诉你期望在logfilenames.txt中。完整路径,ls -lth或OR的完整列表请编辑您的问题以包含filel logfilenames.txt的必需输出。祝你好运。 – shellter

+0

logfilenames.txt ...将具有来自find server.log的输出* -exec ls -lth {} \; | awk'{print $ 9}'作为/directory/subdirectory/logs/server.log – Venki

回答

0

为什么不只是做

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"' 
+0

好吧,那当然有效......谢谢。但我如何在输出awk?此外,如果我想输出给用户,说明开始日期和时间以及结束日期时间位于这些服务器日志文件中,那么这对用户来说只是很好的信息。 – Venki

+0

我如何将其重定向到输出文件..? awk -F - '“2012.12.06 01:56:01”<$ 1 && $ 1 <=“2012.12.08 04:30:00”'server.log * – Venki

+0

Logfile =“$ HOSTNAME.log” awk - F - '“$ starttime”<$ 1 && $ 1 <=“$ endtime”'server.log *>“$ Logfile” 这似乎不起作用... – Venki