2012-01-19 4 views
3

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

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

ответ

1

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

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

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

+0

Большое спасибо:] – user1159144

1

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

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

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

0

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

tail log_file -n 60 

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

tail -f log_file -n 60 

с

tail -f log_file -n 60 > short_log_file 

вы можете создать 60 строк файла

+0

Причина I хочу показать его на веб-сайте :) И не хочу загружать x MB-файл, просто чтобы показать его часть. Спасибо – user1159144

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()); 
    } 
    ... 
} 
... 
Смежные вопросы