CentOS 4.x
如果这不是提问这个问题的适当的地方,我提前道歉。 它属于一个Linux服务器/ ITpipe理任务。
我在旧的CentOS 4.x服务器上有一个日志文件,我想删除比特定date更早的日志条目,并将它们放在一个新的文件中进行归档。
这是一个日志格式的例子:
2012-06-07 22:32:01,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:32:03,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:32:04,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123| 2012-06-07 22:32:10,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:32:12,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:32:15,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123| 2012-06-07 22:32:40,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:32:58,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:33:01,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123| 2012-06-07 22:33:01,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:33:02,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|
基本上,我正在寻找一个将做以下事情的单线程:
我知道有这样做的日志旋转工具,但这应该只是一个一次性的任务,所以我不想设置。
补充笔记:
tail -n 10000 > newfile.txt但这意味着将“好”日志移动到一个新的文件,然后做一个名称交换…然后我仍然需要删除“好“来自档案的条目。 简单的事情可能会为你工作。
假设日志条目在一行上,并且行总是以YYYY-MM-DD开始,那么这样一个简单的脚本将按date分割日志文件。
logsplit:用法cat logfile | logsplit
#!/bin/bash LOGBASEPATH=/logfilepath/logfile while read LOGLINE ; do [[ -z ${LOGLINE} ]] && continue # skip empty dayprefix=`echo $LOGLINE | cut -d ' ' -f 1` echo $LOGLINE > $LOGBASEPATH/logname.$dayprefix done
这将很好地匹配logrotate的dateext选项,所以你可以每天有一个日志文件。