Como posso mostrar longas linhas de console como exibição paginada?

4

Gostaria de imprimir longas linhas de console como páginas que estão abaixo umas das outras.

Por exemplo

AAAAAAABBBBBBBXX
CCCCC
DDDDDDDEE
FFFFFFFGGGGG
IIII

deve ser exibido como

AAAAAAA
CCCCC
DDDDDDD
---
BBBBBBB

EE
---
XX


===
FFFFFFF
IIII

---
GGGGG


===

em vez de envolver linhas. Basicamente, para um número fixo de linhas ("chunk") e se houver larguras de linha além de uma determinada coluna, uma nova "página" deve ser criada e exibida no console. Deve ser feito em pedaços de linhas, para evitar que, para muitas linhas, as "páginas" apareçam na parte inferior. Também pode haver várias "páginas de extensão" necessárias, se a linha for muito longa ("XX" neste exemplo). Note que no final, linhas vazias podem ser adicionadas na entrada para ter um pedaço completo de dados. "---" são separadores de páginas e "===" separadores de fragmentos.

A idéia básica é que a exibição de algo como dados tabulares se alinha. Existe uma maneira fácil de fazer isso?

    
por Gerenuk 15.03.2016 / 14:39

1 resposta

1

Isso não é exatamente o que você pediu, mas eis o que eu faço:

Canalize a saída em less com a opção -S (linhas longas):

my_command_that_outputs_tables | less -S

Em seguida, dentro do visualizador less , as teclas de cursor para a esquerda / para a direita "rolam" para a esquerda e para a direita pelos seus dados, mais ou menos uma página por vez. Bata q para sair ou ? para ajuda.

E aqui está como fazer o que você quer:

my_command_that_outputs_tables | expand | tee >(cut -c1-79) >(sleep 1; cut -c80-159) | {sleep 2; cut -c160-}

Este exemplo é para dados com até três telas de 80 colunas de largura, com paradas de tabulação de 8 espaços.

  • expand converte guias em espaços. Sem esses dados com guias, não caberia no terminal.
  • tee duplica os dados em três fluxos idênticos, neste caso; dois como "arquivos", um como stdout. Você pode adicionar quantas saídas "arquivo" quiser.
  • >(...) é a sintaxe bash para tratar um arquivo de saída como se fosse um pipe.
  • sleep 1 e sleep 2 são atrasos que fazem as páginas saírem na ordem correta. Isso é um pouco complicado; pode haver uma maneira melhor.
  • cut -cM-N retira uma fatia vertical da entrada. M é a primeira coluna, contada a partir de 1 e N é a última coluna. Se N for omitido, ele levará todos os caracteres até o final da linha.

Então, ele pega seus dados, duplica-os em três fluxos e, em seguida, divide cada fluxo verticalmente.

    
por 15.03.2016 / 17:19

Tags