Wie kann ich mithilfe einer Schleife eine bestimmte Anzahl von Wörtern oder Zeichen in einer bestimmten Zeit anzeigen? Nehmen wir an, ich möchte 120 Wörter in einer Minute anzeigen.
Hier ist die Schleife, die ich ausprobiert habe:
FS=$'\n'
for j in `cat $1`;
do
echo "$j";
sleep 1;
clear;
done
Dies dauert nur eine Sekunde, funktioniert aber nicht für 120 Wörter in einer Minute oder ähnliches. Wie kann ich das machen?
Antwort1
Der Sleep-Befehl bewirkt eine Verzögerung für eine bestimmte Zeitspanne (in Sekunden). Eine sleep 1
Verzögerung wäre 1 Sekunde (ein Wort pro Sekunde). Sie können die Verzögerung verlängern, indem Sie den zweiten Parameter erhöhen oder ihn für eine Verzögerung von weniger als 1 Sekunde in kleinere Einheiten aufteilen, z. B. sleep .1
für eine Verzögerung von 1/10 Sekunde oder sleep .001
1/1000 Sekunde usw.
Wenn Sie also 120 Wörter pro Minute anzeigen möchten, können Sie Folgendes verwenden sleep .5
(das bedeutet, jedes Wort wird in 0,5 Sekunden angezeigt, was auch 120 Wörter pro Minute bedeutet).
Und Ihr endgültiges Skript würde wie folgt aussehen:
#!/bin/bash
for word in $(< "$2");
do
echo "$word";
sleep $1;
clear;
done
Speichern Sie das Skript mit dem Namen scriptname.sh
und machen Sie es ausführbar. chmod +x scriptname.sh
Führen Sie das Skript dann mit./scriptname.sh .5 infile
Antwort2
Es ist üblich, while read line ; do . . .; done
in Bash eine Struktur zu verwenden, um Dateien Zeile für Zeile zu lesen. Vorausgesetzt, Ihre Eingabedatei enthält ein Wort pro Zeile, ist es einfach, so etwas zu tun:
while read line; do printf "%s\n" "$line" ; sleep 3; done < input.txt
Python kann dies ganz einfach tun:
#!/usr/bin/env python
import sys,time
for line in sys.stdin:
print line.strip()
sys.stdout.flush()
time.sleep(1)
Verwendung:
python print_with_delay.py <input.txt