テキストファイルから特定の時間に特定の文字を表示する

テキストファイルから特定の時間に特定の文字を表示する

ループを使用して、指定された時間内に特定の数の単語または文字を表示するにはどうすればよいでしょうか。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 .11/10 秒の遅延の場合はsleep .0011/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 

関連情報