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
.