¿Cómo puedo mostrar una cantidad específica de palabras o caracteres en un tiempo determinado usando un bucle? Digamos que quiero mostrar 120 palabras en un minuto.
Aquí está el bucle que he probado:
FS=$'\n'
for j in `cat $1`;
do
echo "$j";
sleep 1;
clear;
done
Éste sólo toma un segundo pero no funciona para 120 palabras en un minuto o similar. ¿Cómo puedo hacer esto?
Respuesta1
El comando de suspensión genera un retraso durante un período de tiempo específico (en segundos). Con sleep 1
retraso sería de 1 segundo (una palabra por segundo). Puede cambiar para obtener más retraso de tiempo incrementando el segundo parámetro o para retrasar menos de 1 segundo dividirlo en unidades bajas; Como sleep .1
por un retraso de 1/10 de segundo o sleep .001
por un retraso de 1/1000 de segundo, etc.
Entonces, si desea mostrar 120 palabras por minuto, puede usar sleep .5
(eso significa mostrar cada palabra en 0,5 segundos, lo que también significa 120 palabras en un minuto)
Y su guión final sería el siguiente:
#!/bin/bash
for word in $(< "$2");
do
echo "$word";
sleep $1;
clear;
done
Guarde el script nombrado scriptname.sh
y hágalo ejecutable por chmod +x scriptname.sh
y luego ejecute el script con./scriptname.sh .5 infile
Respuesta2
Es una práctica frecuente utilizar while read line ; do . . .; done
la estructura en bash para leer el archivo línea por línea. Suponiendo que su archivo de entrada tenga una palabra por línea, es fácil hacer algo como esto:
while read line; do printf "%s\n" "$line" ; sleep 3; done < input.txt
Python puede hacer esto con bastante facilidad:
#!/usr/bin/env python
import sys,time
for line in sys.stdin:
print line.strip()
sys.stdout.flush()
time.sleep(1)
Uso:
python print_with_delay.py <input.txt