如何以给定的线/秒速率制作cat / tac流?

时间:2014-10-02 12:54:13

标签: linux shell

假设你有一个名为“filename”

的大日志文件

如果您 tail -f filename ,那么只有当文件名自行更新时才会有一个流

如果您 cat filename ,那么您有一个流,但如果您是CPU,则无法读取它 比英特尔8088更新

如果您 cat filename |更多然后你逐页有一个流,可能会破坏你的空格键

如何以给定的速率列出文件(例如:每0.05秒一行)所以我有时间阅读,但我不需要按空格键数百次?

(我不使用 | grep 因为在我的特殊情况下,我不知道究竟要搜索什么)

4 个答案:

答案 0 :(得分:7)

yes | pv --quiet --rate-limit 10

我在这里使用yes来获取快速文本来源;由于许多原因,pv是一个非常有用的工具,但它的一个功能是速率限制器。你需要告诉它安静,所以它不打印它的进度指示器。限制是以每秒字节数为单位。

另请参阅:https://superuser.com/questions/526242/cat-file-to-terminal-at-particular-speed-of-lines-per-second

答案 1 :(得分:5)

使用

perl -MTime::HiRes=usleep -pe '$|=1;usleep(300000)'
#or
perl -pe 'select(undef,undef,undef,0.3)'

您可以将上面的shell函数添加到~/.profile例如

slowcat

slowcat() {
    perl -MTime::HiRes=usleep -pe '$|=1;usleep(300000)' "$@"
}

将接受文件名以及管道输入

slowcat filenames....
command | slowcat

以下将产生输出作为典型的电影电脑屏幕或通过300Baud调制解调器的连接......

perl -MTime::HiRes=usleep -ne '$|=1;while($c=getc(*stdin)){usleep(33000);print $c}'

答案 2 :(得分:3)

也许是这样的:

#!/bin/bash


while read -r line; do 
   echo "$line"; # do whatever you want with line
   sleep 0.05

done < file

答案 3 :(得分:1)

希望这会有所帮助:

 cat filename|awk  '{print $0 ; system("sleep 0.05")}'

由于上述解决方案的大多数人都很脏,我会建议以下一个班轮:

while read line; do echo $line; sleep 0.05 ; done < filename