Как я могу отобразить определенное количество слов или символов за определенное время с помощью цикла. Допустим, я хочу отобразить 120 слов за одну минуту.
Вот цикл, который я попробовал:
FS=$'\n'
for j in `cat $1`;
do
echo "$j";
sleep 1;
clear;
done
Это занимает всего одну секунду, но не работает для 120 слов за одну минуту или что-то в этом роде. Как мне это сделать?
решение1
Команда sleep создает задержку на указанное время (в секундах). С sleep 1
задержкой это будет 1 секунда (одно слово в секунду). Вы можете изменить задержку на большее время, увеличив второй параметр, или для задержки менее 1 секунды разделить ее на меньшие единицы; например, sleep .1
для задержки 1/10 секунды или sleep .001
для задержки 1/1000 секунды и т. д.
Итак, если вы хотите отображать 120 слов в минуту, вы можете использовать sleep .5
(это означает отображение каждого слова за 0,5 секунды, что также означает 120 слов в минуту)
И ваш окончательный сценарий будет выглядеть следующим образом:
#!/bin/bash
for word in $(< "$2");
do
echo "$word";
sleep $1;
clear;
done
Сохраните скрипт с именем scriptname.sh
и сделайте его исполняемым, chmod +x scriptname.sh
а затем запустите скрипт с помощью./scriptname.sh .5 infile
решение2
Часто в bash используется while read line ; do . . .; done
структура для чтения файла построчно. Если предположить, что в вашем входном файле по одному слову на строку, то легко сделать что-то вроде этого:
while read line; do printf "%s\n" "$line" ; sleep 3; done < input.txt
Python может сделать это довольно легко:
#!/usr/bin/env python
import sys,time
for line in sys.stdin:
print line.strip()
sys.stdout.flush()
time.sleep(1)
Использование:
python print_with_delay.py <input.txt