Comandos de paginação!

Iniciado por AleBark, 11 de Novembro de 2015, 04:29

tópico anterior - próximo tópico

AleBark

E ai pessoal, tudo bem??

To com uma dúvida bem chata!

Eu tenho um arquivo .txt, e eu quero que ele exiba 8 linhas por vez no terminal, apos ele exibir essas 8 linhas, elas somem (clear) e depois continuo nas outras 8... e assim vai.
Já pesquisei sobre os comandos more e less, mas não consegui chegar ao resultado que eu quero, no máximo ajustar o screensize para 8 ( cat exemplo.txt | more -8 ), e assim ir mostrando 1 linha por vez ..  :-\

Alguém ai pra me dar uma luz?
Obrigado :)

irtigor

É um pedido bem peculiar, dá pra explicar o porquê?

AleBark

Na verdade é um exercicio do meu curso, que eu não to conseguindo desenvolver, o enunciado é esse:
Mostre uma listagem do arquivo notas.txt, mas mostrando de 8 em 8, limpando a tela a cada página de 8 mostrada.

Ta me dando até dor de cabeça já  ;D

irtigor

Mas você tem que achar algo que faça isso, ou pode construir algo (combinar comandos, estruturas de decisão e etc)?

Com wc, um loop e o tail dá pra fazer o principal.

AleBark

#4
Então, posso fazer como eu desejar, com loop, pipe, etc... com tanto que consiga colocar em uma função, e executar ela!

irtigor

Com o wc você pode pegar o número de linhas que um arquivo tem.


wc -l < arquivo.txt


Ai basta criar um laço que incremente de 8 em 8 até o final (que você sabe usando o comando anterior). Dentro desse laço use um "tail -n +[ponto de inicio] arquivo.txt | head -8" pra pegar as 8 primeiras linhas a partir de um ponto (que vai variar em função do incremento do laço). Pra pausar a cada 8 e limpar a tela antes de mostrar o próximo você pode colocar um "read -s -n 1 key" e um clear, ainda dentro do laço.

AleBark

Putss!! vi sua resposta meio tarde, já tinha conseguido implementar um código:

ficou assim:
function paginar_notas()

{
clear

while read Notas
   
do
      
((ContLin++))
echo $Notas
((ContLin % 8)) ||
{
# para ler qualquer caractere
read -n1 -p"Tecle Algo " < /dev/tty
# limpa a tela após a leitura
clear
}
done < notas.txt


}

paginar_notas

Mas mesmo assim, muito obrigado pela atenção/ajuda!! :D