Um caminho Perl:
perl -ne 'print && exit if $.==666' file
Eu testei criando um arquivo com os números de 1 a 999999. Nesse arquivo, a solução Perl acima e awk
com exit
são os mais rápidos dos mencionados até agora:
$ perl -le 'print for 1..999999' > file
$ time perl -ne 'print && exit if $.==666' file
666
real 0m0.004s
user 0m0.000s
sys 0m0.000s
$ time awk 'NR==666 { print ; exit ; } ' file
666
real 0m0.004s
user 0m0.000s
sys 0m0.000s
$ time tail -n +666 file | head -n1
666
real 0m0.021s
user 0m0.004s
sys 0m0.000s
$ time sed -n '666p' file
666
real 0m0.125s
user 0m0.112s
sys 0m0.012s
$ time awk 'NR==666' file
666
real 0m0.161s
user 0m0.156s
sys 0m0.000s
Dito isto, a sua solução original de head -n666 file | tail -n1
é também incrivelmente rápida, muito robusta e completamente portátil. Por que você acha que não é?