AWK - Display line before the matching string
awk '/the_string/{print x};{x=$0}' file.txt
NOTE: This starts at the bottom of the file searching upwards and once it finds the search string it displays everything else above.
Example
Assuming a file, test.txt, exists with the following contents:
10 Peter Terence Roux 45 11 Virginia Genevieve Roux 45 12 Felix Devon Roux 5 13 David Bruce Stevenson 48 14 Bob James Smith 16 48 Adam Winter Ridley 23
Running
awk '/Peter/{print x};{x=$0}' test.txt
returns:
NOTE: As there is no line about row 10, which contains the search string Peter, an empty line is added to the result.
Running
awk '/Roux/{print x};{x=$0}' test.txt
returns:
10 Peter Terence Roux 45 11 Virginia Genevieve Roux 45
NOTE: As there is no line about row 10, which contains the search string Roux, an empty line is added to the result.
Row 11 has the the search string Roux, results in the line above, row 10, being added to the result; even though row 10 also contains the search string.
Row 12 has the the search string Roux, results in the line above, row 11, being added to the result; even though row 10 also contains the search string.
No further rows contain the search string so nothing else is added to the output.
Running
awk '/4/{print x};{x=$0}' test.txt
returns:
10 Peter Terence Roux 45 12 Felix Devon Roux 5 13 David Bruce Stevenson 48 14 Bob James Smith 16