поиск содержимого файла в последних n строках сценария оболочки

#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
  

Таким образом, вы будете более уверены, что ничего не упускаете или не слишком сильно греппируете.