📋
rfコマンドの実例: コマンドの出力にタイムタンプをつける
実例: コマンドの出力にタイムスタンプをつける
コマンドやスクリプトを実行したときに、タイムスタンプをつけたいときがあります。タイムスタンプをつけるオプションがあればそれで解決しますが、それがないときのほうが多いと思います。そういった時に、awkやbashスクリプトにパイプしてタイムスタンプをつける方法を思いつきますが、意外と手間がかかります。
しかし、rfコマンドを使うと、簡単にタイムスタンプをつけることができます。以下の例では、タイムスタンプをつけたいコマンドの例として、rubyを使い0.5秒ごとにhelloと出力しています。このとき、$stdout.flushしないとバッファリングされてしまい、なかなか出力されないので注意が必要です。
> ruby -e 'loop{ sleep0.5; puts "hello"; $stdout.flush }' | cat
hello
hello
hello
hello
-- snip --
> ruby -e 'loop{ sleep0.5; puts "hello"; $stdout.flush }' | rf '[Time.now, _].to_v'
2025-12-17 13:25:20 +0900 hello
2025-12-17 13:25:21 +0900 hello
2025-12-17 13:25:21 +0900 hello
2025-12-17 13:25:22 +0900 hello
-- snip --
# rf v1.33.0移行なら以下のようにも書けます
> ruby -e 'loop { sleep 0.5; puts "hello"; $stdout.flush }' | rf 'Ssv Time.now,_'
2025-12-17 13:25:55 +0900 hello
2025-12-17 13:25:55 +0900 hello
2025-12-17 13:25:56 +0900 hello
-- snip --
Discussion