在超过 6 个月的文件中搜索日志条目,并将其从文件中删除

  • 本文关键字:文件 删除 搜索 日志 bash shell
  • 更新时间 :
  • 英文 :


我想在这里做的是,我每天都会附加日志文件。我想从文件中删除超过 6 个月的日志条目。我可以删除 6 个月的条目,但超过 6 个月的条目怎么办,我找不到解决方案。有人可以让我了解这个逻辑并给出一些提示吗?

#!/bin/bash
pattern=$(date -d "6 month ago" +%Y%m%d)
sed "/$pattern/d" /root/new/Logfile.log >> outputfile

我在这里要做的是,它还应该检查超过 6 个月Logfile.log条目,其中第 4 列包含日期。

示例日志文件.log模式如下所示:

ERROR     8245001       000 20141215  171010    Patch output error in output  
ERROR     8245001       000 20141215  171010    Patch output error in output  
ERROR     8245001       000 20150515  171010    Patch output error in output  
ERROR     8245001       000 20150515  171010    Patch output error in output  
ERROR     8245001       000 20161215  171011    Patch output error in output  
ERROR     8245001       000 20161215  171011    Patch output error in output  
ERROR     8245001       000 20161215  171011    Patch output error in output  
ERROR     8245001       000 20161215  171011    Patch output error in output  
ERROR     8245001       000 20171215  171012    Patch output error in output  
ERROR     8245001       000 20171215  171012    Patch output error in output  
ERROR     8245001       000 20171215  171012    Patch output error in output  
ERROR     8245001       000 20180515  171012    Patch output error in output  
ERROR     8245001       000 20180515  171119    Patch output error in output  
ERROR     8245001       000 20180515  171119    Patch output error in output  

请注意,您的问题和此答案都不bash具体。您正在询问策略,而示例代码的实质是sed

您可能希望使用比sed更灵活的东西。我会使用awk.而且你很不走运,因为你使用理智的日期格式允许基本的数字或字符串比较来确定顺序! 因此,使用您的示例输入:

$ awk -v d="20180101" '$4>=d' file
ERROR     8245001       000 20180515  171012    Patch output error in output
ERROR     8245001       000 20180515  171119    Patch output error in output
ERROR     8245001       000 20180515  171119    Patch output error in output

或者,如果您愿意:

$ awk -v d="20180101" '$4>=d' c > c,$$ && mv c,$$ c

awk/gawk在线用户:

gawk -v dt="$(date -d "6 month ago" +%Y%m%d)" '$4+0>=dt+0' /root/new/Logfile.log >> outputfile

检查awk 如何在字符串和数字之间转换

最新更新