我有日志文件,我希望有60行。 当出现61行时,脚本应该从头开始剪切并将其粘贴到我的备份日志文件的末尾。
但我不知道该怎么做。你能救我吗?
答案 0 :(得分:1)
您需要在没有第一行的情况下重写文件,因为无法从头开始截断文件。
换句话说,您需要逐行读取文件,并将除第一行之外的每一行写入新文件。将第一行附加到备份日志文件,然后将新文件重命名为旧文件。
您需要确保在完成阅读和覆盖之间不写入旧文件。您可能希望使用文件锁定来防止这种情况。
答案 1 :(得分:1)
使用以下组合:
tail --lines=60 my_log
获取日志文件的最后60行head --lines=-60 my_log
获取日志文件的最后60行我相信你可以解决其余的问题:)
答案 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行文件