shell脚本从日志文件中删除6个月的日志

我有一个大小为6.2 GB的日志文件,这个日志文件正在被进程使用,并且不断的写入日志到这个文件中。 现在我不想旋转日志,但是我想清除这个日志文件。 我想从这个文件中删除6个月以前的日志。 是否有可能使用shell脚本来读取日志文件并删除超过6个月的日志?

下面是日志格式

10.0.3.xx - - [17/Jun/2016:14:21:59 +0000] "GET /visible_topics HTTP/1.1" 200 581 "-" "help/97a1dd7eb981421b9719adde381560a78bed0b66 (ip-10-0-3-xxx; user1; 4411) ruby/2.3.0 (0; x86_64-linux)" 

解决scheme实际上是使用logrotate :它工作得很好,它也可以压缩旋转的日志。

如果你真的不想使用logrotate,你必须手动cat / copy你的日志文件的相关部分到一个新的,然后删除旧的。

如果没有日志格式的详细示例,则无法向您提供有关必需的shell命令的任何build议。

无论如何,你应该真的使用logrotate。

我想从这个文件中删除6个月以前的日志。

我不清楚你的意思,但如果我不得不猜测,你想从这个文件中删除超过6个月的日志文件条目 。 如果是这样的话,可以这样做,但这是一个pipe理* nix系统日志的非常特别的方式。

你想做什么(如果我的假设是正确的)将要求parsing该文件中的每一行,并确定时间戳,以testing入口date是否在你当前的6个月窗口内。 根据时间戳的通过/失败,您将写出没有“旧”条目的新日志文件。 你可以使用shell之类的工具,比如grepheadtail来达到这个目的,但是为了提高性能,你可能需要考虑一个专门为你需要量身定制的自定义编译的C应用程序。

我不知道这个日志文件是在什么样的硬件上,但是这个日志文件(6.8GB)的庞大的大小在parsing旧的条目和写入新的条目时可能会造成显着的性能瓶颈。 在大多数情况下,当事情非常麻烦的时候,通常这个过程需要审查。 然而,这个规则有一些特例。 祝你好运。