代码之家  ›  专栏  ›  技术社区  ›  sorin

我可以在awk中进行基于时间的进度吗?

awk
  •  0
  • sorin  · 技术社区  · 9 年前

    我目前正在使用 awk

    我想更新这段代码,使其避免每分钟打印超过一个点(或类似的东西)。显然,如果我没有任何进展(流式传输的新线路),就不会发生更新。

    代码的当前版本位于 https://gist.github.com/ssbarnea/f7b72491af524fa364d9fc328cd43f2a

    1 回复  |  直到 9 年前
        1
  •  2
  •   Ed Morton    9 年前

    awk '
    function prtDot() {
        currTime = systime()
        if ( (currTime - prevTime) > 60 ) {
            printf "." | "cat>&2"
            prevTime = currTime
        }
    }
    { print $0; prtDot() }
    END { print "" | "cat>&2" }
    '
    

    e、 g.打印a .

    $ cat tst.awk
    function prtDot() {
        currTime = systime()
        if ( (currTime - prevTime) > 10 ) {
            printf "." | "cat>&2"
            prevTime = currTime
        }
    }
    { printf "%s",$0%10 | "cat>&2"; prtDot() }
    END { print "" | "cat>&2" }
    
    $ i=0; while (( i < 50 )); do echo $((++i)); sleep 1; done | awk -f tst.awk
    1.2345678901.23456789012.3456789012.34567890123.4567890
    
    $ i=0; while (( i < 50 )); do echo $((++i)); sleep 3; done | awk -f tst.awk
    1.2345.6789.0123.4567.8901.2345.6789.0123.4567.8901.2345.6789.0
    

    systime() 在awk中被呼叫。