【问题标题】:log file search based on date and time range on multiple log files using awk使用 awk 基于日期和时间范围对多个日志文件进行日志文件搜索
【发布时间】:2012-12-20 15:34:03
【问题描述】:

我的日志文件分布在各种日志文件中(基本上它们被设置为轮换日志)。我需要根据日期和时间提取日志.. 示例日志文件具有以下内容。

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 one liner...

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 循环的帮助才能完成此脚本。

【问题讨论】:

  • 好问题,但我们无法确定您希望在 logfilenames.txt 中包含什么内容。完整路径,ls -lth OR ?? 的完整列表请编辑您的问题以包含 filel logfilenames.txt 所需的输出。祝你好运。
  • logfilenames.txt...会有来自 find server.log* -exec ls -lth {} \; 的输出| awk '{print $9}' as /directory/subdirectory/logs/server.log

标签: awk


【解决方案1】:

为什么不这样做

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

还有,

cat `cat logfilenames.txt` 

将 cat 包含在 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"'

【讨论】:

  • 嗯,这当然有效...谢谢。但我如何在输出上 awk?另外,如果我想向用户输出说开始日期和时间以及结束日期时间位于这些服务器日志文件中怎么办......从用户的角度来看,这将是很好的信息。
  • 如何将其重定向到输出文件..? awk -F - '"2012.12.06 01:56:01"
  • Logfile="$HOSTNAME.log" awk -F - '"$starttime" "$Logfile" 这好像不是上班……
  • 这是因为 "$starttime" 和 "$endtime" 对 awk 不可用。您需要使用 -v option 将 bash 变量传递给 awk 脚本,但这需要重写您的一个衬里脚本。
  • meta-cat 有点可爱,但它仍然是useless use of cat。我可能会改用xargs cat &lt;logfilenames.txt
猜你喜欢
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 2011-03-14
  • 2021-07-23
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多