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