ループを使用して、指定された時間内に特定の数の単語または文字を表示するにはどうすればよいでしょうか。1 分間に 120 語を表示したいとします。
私が試したループは次のとおりです:
FS=$'\n'
for j in `cat $1`;
do
echo "$j";
sleep 1;
clear;
done
これは 1 秒しかかかりませんが、1 分で 120 語などには対応していません。どうすればいいでしょうか?
答え1
sleep コマンドは、指定された時間 (秒単位) だけ遅延させます。sleep 1
遅延は 1 秒 (1 秒あたり 1 ワード) になります。2 番目のパラメータを増分して遅延時間を長くしたり、1 秒未満の遅延の場合は小さい単位に分割したりできます ( sleep .1
1/10 秒の遅延の場合はsleep .001
1/1000 秒の遅延など)。
したがって、1分間に120語を表示したい場合は、次のようにしますsleep .5
(つまり、各語を0.5秒で表示し、1分間に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 では、ファイルを 1 行ずつ読み取るために構造を使用するのが一般的ですwhile read line ; do . . .; done
。入力ファイルに 1 行につき 1 つの単語が含まれていると仮定すると、次のようにするのは簡単です。
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