Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在日志文件中保留60行_Linux_File_Backup_Lines - Fatal编程技术网

Linux 在日志文件中保留60行

Linux 在日志文件中保留60行,linux,file,backup,lines,Linux,File,Backup,Lines,我有一个日志文件,我希望有60行。 当出现第61行时,脚本应该从开头剪切该行,并将其粘贴到备份日志文件的末尾 但我不知道该怎么做。你能帮我吗?你需要重写没有第一行的文件,因为无法从一开始就截断文件 换句话说,您需要逐行读取文件,并将除第一行之外的每一行写入新文件。将第一行附加到备份日志文件中,然后将新文件重命名为旧文件 您需要确保在完成读取和覆盖之间不会写入旧文件。您可能希望使用文件锁定来防止这种情况。为什么要使用两个单独的文件?您可以使用以下命令显示备份文件的最后60行: tail log_f

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


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

你需要重写没有第一行的文件,因为无法从一开始就截断文件

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


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

为什么要使用两个单独的文件?您可以使用以下命令显示备份文件的最后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());
        }
        ...
    }
    ...