#linux #bash #shell #grep
#linux #bash #оболочка #grep
Вопрос:
Я использую команду содержимого файла grep и что-то делаю.
Однако размер файла непрерывно растет каждую секунду. (будет больше 500 МБ)
Из-за проблемы с производительностью я хочу отображать содержимое файла в последних N строках, а не все содержимое файла.
if grep -q "SOMETHING" "/home/andy/log/1.log"; then
ps -ef | grep "127.0.0.1:50000" | awk '{print $2}' | xargs kill; cat /dev/null > /home/andy/log/1.log
fi
Как я могу изменить сценарий, чтобы отобразить содержимое файла grep в последних N строках?
Спасибо!
Комментарии:
1. Просто используйте
tail
и передавайте его выводgrep
.
Ответ №1:
вы можете использовать tail -n для получения последних n строк файла.
Итак, если бы вы хотели просмотреть только последние 100 строк, вы могли бы заставить свой скрипт работать следующим образом:
if tail -n 100 "/home/andy/log/1.log" | grep -q "SOMETHING"; then
...
Ответ №2:
Другой подход заключается в сравнении текущего размера файла с прошлым и использовании tail -c
для получения разницы в символах (байтах)
# prev_size is known
curr_size=$(stat -c %s file.log)
if tail -c $((curr_size - prev_size)) | grep -q pattern; then ...
# ...
fi
prev_size=$curr_size
# loop
Таким образом, вы будете более уверены, что ничего не упускаете или не слишком сильно греппируете.