Como posso exibir um número específico de palavras ou caracteres em um determinado momento usando um loop. Digamos que eu queira exibir 120 palavras em um minuto.
Aqui está o loop que tentei:
FS=$'\n'
for j in `cat $1`;
do
echo "$j";
sleep 1;
clear;
done
Este leva apenas um segundo, mas não funciona com 120 palavras em um minuto ou algo semelhante. Como posso fazer isso?
Responder1
O comando sleep atrasa por um período de tempo especificado (em segundos). Com sleep 1
atraso seria de 1 segundo (uma palavra por segundo). Você pode alterar para um atraso maior incrementando o segundo parâmetro ou para um atraso menor que 1 segundo dividi-lo em unidades baixas; Como sleep .1
para atraso de 1/10 de segundo ou sleep .001
para atraso de 1/1000 de segundo e etc.
Então, se você quiser exibir 120 palavras por minuto, você pode usar sleep .5
(isso significa exibir cada palavra em 0,5 segundo, o que também significa 120 palavras em um minuto)
E seu script final seria o seguinte:
#!/bin/bash
for word in $(< "$2");
do
echo "$word";
sleep $1;
clear;
done
Salve o script nomeado scriptname.sh
e torne-o executável chmod +x scriptname.sh
e execute o script com./scriptname.sh .5 infile
Responder2
É uma prática frequente usar while read line ; do . . .; done
estrutura no bash para ler arquivos linha por linha. Supondo que seu arquivo de entrada tenha uma palavra por linha, é fácil fazer algo assim:
while read line; do printf "%s\n" "$line" ; sleep 3; done < input.txt
Python pode fazer isso facilmente:
#!/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