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

时间:2018-05-31 11:37:06

标签: bash shell

我想在这里做的是,我有每天都附加的日志文件。我想从文件中删除超过6个月的日志条目。我可以删除6个月的入口,但入口超过6个月,这是我无法找到解决方案。有人能让我接受这种逻辑并给出一些暗示吗?

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/rest/*</url-pattern>
</filter-mapping>

我想在这里做的是,它还应检查超过6个月的#!/bin/bash pattern=$(date -d "6 month ago" +%Y%m%d) sed "/$pattern/d" /root/new/Logfile.log >> outputfile 条目,其中第4列包含日期。

示例Logfile.log模式如下:

Logfile.log

2 个答案:

答案 0 :(得分:0)

请注意,您的问题和答案都不具体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

答案 1 :(得分:0)

awk / gawk在线人员:

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

检查How awk Converts Between Strings and Numbers