Linux 在日志文件中保留60行
我有一个日志文件,我希望有60行。 当出现第61行时,脚本应该从开头剪切该行,并将其粘贴到备份日志文件的末尾Linux 在日志文件中保留60行,linux,file,backup,lines,Linux,File,Backup,Lines,我有一个日志文件,我希望有60行。 当出现第61行时,脚本应该从开头剪切该行,并将其粘贴到备份日志文件的末尾 但我不知道该怎么做。你能帮我吗?你需要重写没有第一行的文件,因为无法从一开始就截断文件 换句话说,您需要逐行读取文件,并将除第一行之外的每一行写入新文件。将第一行附加到备份日志文件中,然后将新文件重命名为旧文件 您需要确保在完成读取和覆盖之间不会写入旧文件。您可能希望使用文件锁定来防止这种情况。为什么要使用两个单独的文件?您可以使用以下命令显示备份文件的最后60行: tail log_f
但我不知道该怎么做。你能帮我吗?你需要重写没有第一行的文件,因为无法从一开始就截断文件 换句话说,您需要逐行读取文件,并将除第一行之外的每一行写入新文件。将第一行附加到备份日志文件中,然后将新文件重命名为旧文件
您需要确保在完成读取和覆盖之间不会写入旧文件。您可能希望使用文件锁定来防止这种情况。为什么要使用两个单独的文件?您可以使用以下命令显示备份文件的最后60行:
tail log_file -n 60
或者即时更新
tail -f log_file -n 60
与
您可以使用以下组合生成60行文件:
tail--lines=60 my_log
获取日志文件的最后60行head--lines=-60 my_log
获取日志文件中除最后60行以外的所有行我相信你能猜出剩下的:)见上面@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());
}
...
}
...
vector logBuf,backupLogBuf;
...
而(…){
/*无论您在做什么,都要将行存储到“logBuf”而不是日志文件*/
如果(logBuf.size()>=61){
backupLogBuf.push_back(logBuf.front());
logBuf.erase(logBuf.begin());
}
...
}
...
因为我想在网站上显示它:),而不想下载x MB文件,只想显示其中的一部分。谢谢
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());
}
...
}
...