ストップウォッチ

コマンドラインでストップウォッチ - みずぴー日記 にインスパイヤされて、awk でもストップウォッチを作ってみます。 このページにあるストップウォッチが 1 (msec) までを表示していますので、xgawk の time プラグマを使って 1 (msec) の分解能でストップウォッチを表示させます。

time プラグマの使い方は AWK Users JP :: ベンチマークのための時間計測関数 でも使っていますが、単に load してやれば良いです。

#! /usr/local/bin/xgawk -f
# stopwatch.awk
# ストップウォッチ
# usage: xgawk -f stopwatch.awk

@load time

BEGIN {
    start_time = gettimeofday();

    while (1) {
        printf("%s\r", split_time(gettimeofday() - start_time));
    }
}

function split_time(num) {
    milisec     = int((num - int(num)) * 1000);
    sec         = num % 60;
    min         = (num / 60) % 60;
    hour        = (num / 3600) % 24;

    return sprintf("%02d:%02d:%02d.%03d\r", hour, min, sec, milisec);
}

こちらも、CTRL-c で終了、CTRL-z で一時停止になります。

$ xgawk -f stopwatch.awk
00:00:05.853

使いどころに悩ましい gettimeofday() 関数ですが、数少ない出番になります。

tag_xgawk.png