Хранить 60 строк в файле журнала - PullRequest
3 голосов
/ 19 января 2012

У меня есть файл журнала, в который я хотел бы добавить 60 строк. Когда появится 61 строка, сценарий должен отрезать строку от начала и вставить ее в конец моего файла резервного копирования.

Но я понятия не имею, как это сделать.Вы можете мне помочь?

Ответы [ 4 ]

1 голос
/ 19 января 2012

См. Ответ @ 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());
    }
    ...
}
...
1 голос
/ 19 января 2012

Используйте комбинацию:

  1. tail --lines=60 my_log, чтобы получить последние 60 строк вашего файла журнала
  2. head --lines=-60 my_log, чтобы получить все, кроме последних 60 строк журнала.файл

Я уверен, что вы можете понять все остальное:)

1 голос
/ 19 января 2012

Вам нужно переписать файл без первой строки, поскольку нет способа обрезать файл с начала.

Другими словами, вам нужно читать файл построчно и записывать каждыйкроме первой строки в новый файл.Добавьте первую строку в файл журнала резервного копирования, а затем переименуйте новый файл как старый файл.

Вам нужно будет убедиться, что старый файл не записывается между окончанием его чтения и перезаписью.Вы можете использовать блокировку файлов, чтобы предотвратить это.

0 голосов
/ 19 января 2012

Зачем использовать 2 отдельных файла?Вы можете отобразить последние 60 строк файла резервной копии с помощью

tail log_file -n 60

. Или обновления на лету

tail -f log_file -n 60

с помощью

tail -f log_file -n 60 > short_log_file

.Файл 60 строк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...