在日志文件中保留60行

时间:2012-01-19 18:15:11

标签: linux file backup lines

我有日志文件,我希望有60行。 当出现61行时,脚本应该从头开始剪切并将其粘贴到我的备份日志文件的末尾。

但我不知道该怎么做。你能救我吗?

4 个答案:

答案 0 :(得分:1)

您需要在没有第一行的情况下重写文件,因为无法从头开始截断文件。

换句话说,您需要逐行读取文件,并将除第一行之外的每一行写入新文件。将第一行附加到备份日志文件,然后将新文件重命名为旧文件。

您需要确保在完成阅读和覆盖之间不写入旧文件。您可能希望使用文件锁定来防止这种情况。

答案 1 :(得分:1)

使用以下组合:

  1. tail --lines=60 my_log获取日志文件的最后60行
  2. head --lines=-60 my_log获取日志文件的最后60行
  3. 我相信你可以解决其余的问题:)

答案 2 :(得分:1)

见上文@ MartinBroadhurst的答案。

如果您不需要在程序结束之前打印日志,则可以将所有行保留在缓冲区中进行处理,直到程序完成并完成,即

vector<string> logBuf, backupLogBuf;
...
while( ... ) {
    /* do whatever you're doing, storing lines to 'logBuf' instead of the logfile */
    if(logBuf.size() >= 61) { 
         backupLogBuf.push_back(logBuf.front());
         logBuf.erase(logBuf.begin());
    }
    ...
}
...

答案 3 :(得分:0)

为什么要使用2个单独的文件?您可以使用

显示备份文件的最后60行
tail log_file -n 60

或动态更新

tail -f log_file -n 60

tail -f log_file -n 60 > short_log_file

你可以生成60行文件