连续处理tail -f输出

时间:2012-02-22 17:56:45

标签: bash shell

我有一个连续附加数字的文件:

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}',但它没有输出

2 个答案:

答案 0 :(得分:2)

你将遇到缓冲问题。也许适合您的解决方案是:

perl -wne 'BEGIN{ $| = 1 } $t += $_; print $t / $. . "\n"; '

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

答案 1 :(得分:-1)

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