如何使用循環在給定時間內顯示特定數量的單字或字元。假設我想在一分鐘內顯示 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