Soy flojo y podría escribir un guión para hacer esto, pero incluso soy demasiado flojo para pensar cómo hacerlo.
A menudo hago cosas como:
cris$ python runexperiment.py > output.txt
cris$ cat output.txt
A veces, cuando veo el resultado largo de un experimento, me gusta dejar que la página se desplace y vea cómo se forman y se dispersan los patrones sucesivos. Pero usar cat en un archivo con 1 millón de líneas termina en quizás 5 segundos. Esto es demasiado rápido incluso para mí.
¿Hay alguna manera de reducir la velocidad de visualización del archivo, algo así como una 'utilidad de desplazamiento'? Quiero rápido, pero no 200 mil líneas por segundo (todo lo cual presumiblemente la pantalla nunca se registraría de todos modos).
Algo como
cris$ scroll -lps=300 output.txt
Y luego, sentarme y mirar pasar 300 líneas por segundo sería ideal, me imagino.
cat FILENAME | pv -l -L 900 -q
. El límite está en bytes por segundo, no en líneas por segundo, así que estoy haciendo de este un comentario, no una respuesta.Respuestas:
Corto y legible :
Publico estas soluciones porque son pequeñas y legibles, ya que los comentarios de la respuesta de DMas parecen promover este tipo de solución.
Pero odio esto porque: para esta carrera, ¡Perl se bifurcará a
/bin/sleep
300x / segundos!¡Este es un gran consumidor de recursos! También un mal buenas soluciones !
Usando sueño incorporado en perl
Desafortunadamente, la construcción
sleep
se limita a los enteros. Entonces tenemos que usarselect
en su lugar:Bajo perl,
print while <>
podría ser reemplazado por el-p
interruptor:Intentemos:
Explicación:
300 líneas / seg significa 1 línea por 0.0033333333 segundos.
print
sin argumento imprime,$_
que es el espacio de entrada predeterminado .llamado como
... | perl -e
,... | perl -ne
o... | perl -pe
, la entrada estándar se asignaría automáticamente a*STDIN
cuál es el descriptor de archivo predeterminado , por<>
lo que haría lo mismo<STDIN>
que se leerá desde la entrada estándar hasta que se llegue al$/
( separador de registro de entrada que por defecto es una nueva línea ). En inglés, por defecto<>
leerá una línea de la entrada estándar y asignará contenido a la$_
variable.&&
es una condición y , pero se usa allí como un separador de comandos de cadena, por lo que después (con éxito) imprime una línea, haciendo el siguiente comando.select
es un truco de programador para no usarsleep
. Este comando está diseñado para atrapar eventos en descriptores de archivos (entradas y / o salidas, archivos, zócalos y / o zócalos de red). Con este comando, un programa podría esperar 3 tipos de eventos, alimentación lista para leer , alimentación lista para escribir y algún evento sucedió en la alimentación . El cuarto argumento es un tiempo de espera en segundos, por lo que la sintaxis esselect <feeds where wait for input>, <feeds where having to write>, <feed where something could happen>, <timeout>
.Para mayor precisión, puede usar el
Time::Hires
módulo perl:Nota:
$.
es el número de línea de entrada actual .Mejor escrito como
cat >catLps.pl
Uso:
Entonces podríamos:
Por diversión:
fuente
Time::HiRes
módulo perl para mayor precisión-p
cambiar al comando perl, ¡el script se aligeró!solo usa awk con el sueño:
fuente
system(*sleep .1")
generará 10 bifurcaciones / segundos! Esto podría escribirseperl -pe 'system "sleep .1"' log.txt
: Legible también, pero muy costoso (¡noLlego tarde a la fiesta, pero descubrí que este sería un ejercicio de aprendizaje útil para probar en Python, así que pondré lo que obtuve:
Acepta la entrada de stdin o como un argumento (-i) y por defecto escribe una línea por 1/10 de segundo, pero eso se puede cambiar con otro argumento (-d).
fuente