Bash: Ordem inversa de output com o tac

Olá pessoal,
Dica rápida pra quem precisa tirar do BASH a ordem inversa de um output qualquer. Por exemplo.

Suponhamos que preciso da sequência dos anos, em contagem normal partindo do ano de descobrimento do Brasil em 1500 até hoje 2011:

[hudson@vostrolab ~]$ seq 1500 1 2011
1500
1501
1502
1503
.
.
.
2008
2009
2010
2011

Mas eu também posso querer em contagem regressiva do ano de 2011 até o ano de descobrimento do Brasil em 1500:

[hudson@vostrolab ~]$ seq 2011 -1 1500
2011
2010
2009
2008
.
.
.
1503
1502
1501
1500

Sendo que os parâmetros que marquei em vermelho são os valores de incremento.
Assim com o “seq” fica fácil para trabalhar com números.. Mas quando quiser trabalhar com números ou qualquer outro tipo de dado, uma boa saída é o comando “tac“. Por exemplo:

[hudson@vostrolab ~]$ for x in um dois tres quatro cinco; do echo $x; done
um
dois
tres
quatro
cinco

Para exibir na ordem inversa:

[hudson@vostrolab ~]$ for x in um dois tres quatro cinco; do echo $x; done | tac
cinco
quatro
tres
dois
um

Pode não parecer muito útil nessa pequena sequência de um dois tres quatro cinco do exemplo acima, mas quando trata-se de exportação de valores de banco de dados, ou coisas do tipo, esse “tac” é uma bela mão na roda.

Enfim, essas sintaxes e comandos as vezes não são fáceis de lembrar quando estamos passando por determinada situação que precisamos deles. Mas ao menos você lembrar que já leu isso uma vez no Blog CiaLinux, terá a oportunidade de voltar aqui e buscar o POST referente ao assunto. =)

Obrigado pela leitura!

Por: Hudson Murilo dos Santos
Referências: man seq
man tac

3 interações sobre “Bash: Ordem inversa de output com o tac

    1. Opa, E aí Cavanholi, tudo bem?
      Obrigado pelo comentário… O seu ls -r resolveria sim, mas apenas para listagem de conteúdo de diretórios (ls)…
      O POST na íntegra abrange a ordem de um output qualquer… seja ele resultante de um echo, um ls, um cat, um grep, enfim… inverter o que aparece na saída padrão (STDOUT) mesmo de qualquer comando..

      Espero ter esclarecido sua questão…

      Abraços e volte sempre.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Retype the CAPTCHA code from the image
Change the CAPTCHA codeSpeak the CAPTCHA code