how to print the nth line from the end of a file in bash?

bash, sed, tail

Solution

The quick and easy way is `tail -n $n file | head -n 1`.

A more fun way with `awk` is:

awk -v n=$n '{x[NR%n]=$0}END{print x[(NR+1)%n]}' file

If you have fewer than `n` lines, the `tail | head` method will print the first line of the file, the `awk` way will print a blank line.

Problem

Is there a way to print the nth line of a file, counting from the back of the file? I know how to do it from the front of the file, but doing it from the back of the file seems to be more tricky.

Original source