Mostrar caracteres específicos en un tiempo específico desde un archivo de texto

Mostrar caracteres específicos en un tiempo específico desde un archivo de texto

¿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 1retraso 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 .1por un retraso de 1/10 de segundo o sleep .001por 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.shy hágalo ejecutable por chmod +x scriptname.shy luego ejecute el script con./scriptname.sh .5 infile

Respuesta2

Es una práctica frecuente utilizar while read line ; do . . .; donela 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 

información relacionada