Para o seu problema específico, essa não é a maneira mais eficiente de fazer isso, no entanto, você pode usar qualquer um dos itens a seguir para imprimir um arquivo com linhas em ordem reversa, com vários graus de portabilidade ( tac , por exemplo não está incluído por padrão em muitos Unixes):
-
sed '1!G;h;$!d' [file] -
awk '{f[n=NR]=$0}END{for(i=n;i>0;i--)print f[i]}' [file] -
perl -e 'print reverse<>' [file] -
tac [file]
No meu sistema, o mais rápido é tac , conforme testado pelo seguinte:
$ printf '%s\n' {a..z}{a..z}{a..z} > foo
$ time sed '1!G;h;$!d' foo > /dev/null 2>&1
real 0m0.582s
user 0m0.544s
sys 0m0.012s
$ time awk '{f[n=NR]=$0}END{for(i=n;i>0;i--)print f[i]}' foo > /dev/null 2>&1
real 0m0.060s
user 0m0.052s
sys 0m0.008s
$ time perl -e 'print reverse<>' foo > /dev/null 2>&1
real 0m0.021s
user 0m0.016s
sys 0m0.004s
$ time tac foo > /dev/null 2>&1
real 0m0.003s
user 0m0.004s
sys 0m0.000s
... então, se você tiver tac , use-o, mas, caso contrário, use perl ou awk .