如何使用循环在给定时间内显示特定数量的单词或字符。假设我想在一分钟内显示 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