最後の 5 行の表示
単に最後の 5 行かと思っていたら、面白い方向に議論が進んでいるようです。というか、Golf ネタのような感じかな。
質問は最後の 5 行と最後から手前 10 行目の出力ということです。
$ seq 10000000 > /tmp/bigsequel
というテストファイルを用意します。
$ time -p awk 'NR==FNR{nr++;next} (FNR==nr-10) || (FNR>(nr-5))' /tmp/bigsequel /tmp/bigsequel 9999990 9999996 9999997 9999998 9999999 10000000 real 15.52 user 14.99 sys 0.22
$ time -p tac /tmp/bigsequel | awk 'NR==11||NR<=5; NR==11{exit}' | tac 9999990 9999996 9999997 9999998 9999999 10000000 real 0.02 user 0.00 sys 0.00
tac (cat の反対であることは言うまでもないですね) を使ったトリックですが、awk と tac で強力になる良い例ですね。
さらに、キャッシュが有効な場合にはもっと強力です。(これ、速すぎです)
$ seq 20000000 > /tmp/bigsequel $ time -p tac /tmp/bigsequel | awk 'NR==11||NR<=5; NR==11{exit}' | tac 19999990 19999996 19999997 19999998 19999999 20000000 real 0.00 user 0.00 sys 0.00