尾f输出的连续处理



我有一个文件,其中不断添加数字:

1
2
3
4

我想计算它们的平均值,也是连续的,即:

1
1.5
2
2,5

我不想周期性地检查文件,我希望以tail-f的工作方式检查它——只要附加了一行,我就执行平均值计算。

有可能吗?

PS尝试了tail -f file.txt | awk '{total+=$0;count+=1;print total/count}',但它在没有输出的情况下挂起

您将遇到缓冲问题。也许一个对你有用的解决方案是:

perl-wne‘BEGIN{$|=1}$t+=$_;打印$t/$。"\n";'

$|=1关闭缓冲。其余部分与您的awk脚本相同。

Tcl非常适合这种事件驱动的编程。假设您的路径中有一个tclsh

#!/usr/bin/env tclsh
proc calculate_running_mean {chan} {
    gets $chan line
    if {[string is integer -strict $line]} {
        incr ::sum $line
        incr ::count 1
        puts [expr {1.0 * $::sum / $::count}]
    }
}
set filename numbers.txt
set fid [open $filename r]
fileevent $fid readable [list calculate_running_mean $fid]
vwait forever

最新更新