The solution is to store the last 5 lines visited in an array, and also have a variable tracking how many more lines beyond the current one have to be output:
$x = 5; # Number of lines to print above and below.
open (LOG, "GWSvc.log") || die "Unable to get a handle to the file: $!
+\n";
$after = 0;
while (<LOG>) {
if ($after) {
print $_; $after--;
}
else {
push (@lines, $_);
if ($#lines > $x) { shift(@lines); }
}
if (/c9391b56-b174-441b-921c-7d63/) {
print $line while ($line = shift(@lines));
$after = $x;
}
}