Exibindo o conteúdo ao contrário
Dica publicada em Linux / Comandos
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:
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.
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
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.
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