Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: kylix em slack 10.1
Por cego
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Exibindo o conteúdo ao contrário
Linux user
Publicado por D. M. Tavares em 06/03/2008

Login: prof.dmt, 106825 pontos
[ Hits: 4732 ]

Exibindo o conteúdo ao contrário

Estou construindo um script o qual necessita acessar um arquivo, linha a linha, partindo da última linha para a primeira linha. Existe algum comando que possa auxiliar a construção deste script?

Resposta: O comando cat exibe o conteúdo de um arquivo da primeira linha para a última linha, já o comando tac, cat escrito ao contrário, exibe o conteúdo de um arquivo da última linha para a primeira linha.

Exemplo de uso e saída do comando cat:

$ cat dias_semana.txt
Domingo
Segunda-feira
Terça-feira
Quarta-feira
Quinta-feira
Sexta-feira
Sábado

Exemplo de uso e saída do comando tac:

$ tac dias_semana.txt Sábado
Sexta-feira
Quinta-feira
Quarta-feira
Terça-feira
Segunda-feira
Domingo

Exemplo de um script que acessa um arquivo, linha a linha, partindo da última linha para a primeira linha:

#!/bin/bash

lista=`tac dias_semana.txt`
for item in $lista; do
    echo 'Hoje é '$item', dia de bebemorar :-)'
done

Saída do script acima:

Hoje é Sábado, dia de bebemorar :-)
Hoje é Sexta-feira, dia de bebemorar :-)
Hoje é Quinta-feira, dia de bebemorar :-)
Hoje é Quarta-feira, dia de bebemorar :-)
Hoje é Terça-feira, dia de bebemorar :-)
Hoje é Segunda-feira, dia de bebemorar :-)
Hoje é Domingo, dia de bebemorar :-)

Obs.: Caso necessite, troque tac por cat no script acima.

Abraços,

Prof. D.M.T.


Outras dicas deste autor

Leitura recomendada
   Dica Linux recomendada Comandos para Postfix
   Dica Linux recomendada Quem se logou no seu sistema
   Dica Linux recomendada Youtube-dl - Baixando playlists inteiras com um comando - Uso Telecurso 2000
   Dica Linux recomendada Limpando arquivos .conf muito comentados
   Dica Linux recomendada Utilizando o Alien

Comentários
[1] Comentário enviado por elgio em 07/03/2008 - 09:17h:

Teu script NÃO ACESSA l.inha por linha, mas sim PALAVRA por palavra.

Veja o efeito estranho se o arquivo tiver:

Linha um
Oura linha2 dois
Linha tres
Ultima grande linhona quatro

Isto ocorre porque o for não é o adequado aqui, pois ele pega palavra a palavra e nao linha a linha.

o while faz isto:

#!/bin/bash

tac arq.txt | while read item ; do
echo 'Hoje é '$item', dia de bebemorar :-)'
done



[2] Comentário enviado por prof.dmt em 07/03/2008 - 15:29h:

Olá Elgio,

Obrigado por apontar meu descuido (erro). Na pressa, esqueci da variável 'IFS'.

Atribuindo o caracter 'nova linha' ('\n') à variável 'IFS ', é possível usar o 'for' para resolver o problema em questão. Assim, após a devida correção, o 'script' ficará:


#!/bin/bash

lista=`tac dias_semana.txt`
IFS='
'
for item in $lista; do
echo 'Hoje é '$item', dia de bebemorar :-)'
done


Nota: No 'script' acima, foi atribuindo o caracter 'nova linha' à variável 'IFS'.

Mais uma vez, obrigado Elgio. Com contribuições como a sua, a comunidade só tem a ganhar.


Abraços,

Prof. D.M.T.

[3] Comentário enviado por SMarcell em 08/03/2008 - 16:22h:

Emulando o tac com o sed:

sed '1!G ; h ; $!d' < arquivo


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.