awk не знает о конце файла, пока не произойдет смена файла чтения, но вы можете прочитать файл дважды, первый раз, чтобы найти конец, второй, чтобы обработать строку, находящуюся в области видимости. Вы также можете сохранить последнюю строку X в буфере, но она немного перегружена памятью и процессом. Обратите внимание, что для этого нужно дважды упомянуть файл в конце.
awk 'FNR==NR{L=NR-500;next};FNR>=L && /ERROR/{ print FNR":"$0}' my_log my_log
С объяснением
awk '# first reading
FNR==NR{
#last line is this minus 500
LL=NR-500
# go to next line (for this file)
next
}
# at second read (due to previous section filtering)
# if line number is after(included) LL AND error is on the line content, print it
FNR >= LL && /ERROR/ { print FNR ":" $0 }
' my_log my_log
на гну сед
sed '$-500,$ {/ERROR/ p}' my_log