Sou preguiçoso e poderia escrever um script para fazer isso, mas tenho preguiça de pensar em como fazê-lo.
Costumo fazer coisas como:
cris$ python runexperiment.py > output.txt
cris$ cat output.txt
Às vezes, ao olhar para o longo resultado de um experimento, gosto de deixar a página rolar e observar os padrões sucessivos se formarem e se dispersarem. Mas usar gato em um arquivo com 1 milhão de linhas termina em talvez 5 segundos. Isso é rápido demais até para mim.
Existe alguma maneira de diminuir a velocidade da exibição do arquivo, algo como um 'utilitário de rolagem'? Eu quero rápido, mas não 200k linhas por segundo (todas presumivelmente a tela nunca seria registrada).
Algo como
cris$ scroll -lps=300 output.txt
E então, sentar e assistir 300 linhas por segundo rolar além seria o ideal, eu imagino.
cat FILENAME | pv -l -L 900 -q
. O limite é em bytes por segundo, não em linhas por segundo, por isso estou fazendo disso um comentário, não uma resposta.Respostas:
Curto e legível :
Publico essas soluções porque são pequenas e legíveis, pois os comentários da resposta do DMas parecem promover esse tipo de solução!
Mas eu odeio isso porque: Para esta execução, o perl bifurcará para
/bin/sleep
300x / segundos!Este é um grande consumidor de recursos! Também um boas soluções erradas !!
Usando o sono embutido em perl
Infelizmente, o builtin
sleep
é limitado a números inteiros. Então, temos que usarselect
:Sob perl,
print while <>
pode ser substituído pelo-p
switch:Vamos tentar:
Explicação:
300 linhas / s significa 1 linha por 0,0033333333 segundos.
print
sem argumento imprime$_
qual é o espaço de entrada padrão .chamado como
... | perl -e
,... | perl -ne
ou... | perl -pe
, a entrada padrão será automaticamente atribuído ao*STDIN
que é descritor de arquivo padrão , de modo que<>
faria o mesmo que<STDIN>
que irá ler da entrada padrão até$/
( separador de registro de entrada que é por padrão uma nova linha ) será alcançado. Em inglês, por padrão<>
, lerá uma linha da entrada padrão e atribuirá o conteúdo à$_
variável.&&
é um e condição, mas é usado lá como um separador de comando cadeia por isso depois (com sucesso) imprimir uma linha, fazendo próximo comando.select
é o truque desleep
um programador para não usar . Este comando foi projetado para interceptar eventos em descritores de arquivo (entradas e / ou saídas, arquivos, soquete e / ou soquetes de rede). Com esse comando, um programa pode aguardar 3 tipos de eventos, feed pronto para leitura , feed pronto para gravação e algum evento aconteceu no feed . O quarto argumento é um tempo limite em segundos, então a sintaxe éselect <feeds where wait for input>, <feeds where having to write>, <feed where something could happen>, <timeout>
.Para mais precisão, você pode usar o
Time::Hires
módulo perl:Nota:
$.
é o número da linha de entrada atual .Melhor escrito como
cat >catLps.pl
Uso:
Para que pudéssemos:
Para se divertir:
fonte
Time::HiRes
módulo perl para mais precisão-p
comando switch to perl, o script foi iluminado!basta usar awk com sono:
fonte
system(*sleep .1")
irá gerar 10 garfos / s! Isso poderia ser escritoperl -pe 'system "sleep .1"' log.txt
: (! Não sistema amigável) legível também, mas muito caroEstou atrasado para a festa, mas achei que seria um exercício de aprendizado útil para tentar em python, então vou colocar o que recebi:
Ele aceita entrada de stdin ou como argumento (-i) e, por padrão, grava uma linha por 1/10 de segundo, mas isso pode ser alterado com outro argumento (-d).
fonte