gnomon』という、出力に処理の経過時間を付与してくれるというツールを見かけたのだが、似たような事をシェル芸なりでできないかと思ったのでやってみることにした。
元々がmoreutilsのtsコマンドを発想元にしているということなので、以下のようにtsコマンドを利用すれば同様の事ができるようだ。

cmd | ts -s # 作業全体の経過時間
cmd | ts -i # 直前の出力からの経過時間
blacknon@BS-PUB-UBUNTU-01:~$ yes 'echo test_$(date +%Y%m%d_%H%M%S);sleep $((RANDOM%5))' | head -10 | bash | ts -s
00:00:00 test_20171210_190930
00:00:02 test_20171210_190932
00:00:04 test_20171210_190934
00:00:08 test_20171210_190938
00:00:11 test_20171210_190941
00:00:14 test_20171210_190944
00:00:17 test_20171210_190947
00:00:21 test_20171210_190951
00:00:23 test_20171210_190953
00:00:27 test_20171210_190957
blacknon@BS-PUB-UBUNTU-01:~$ yes 'echo test_$(date +%Y%m%d_%H%M%S);sleep $((RANDOM%5))' | head -10 | bash | ts -i
00:00:00 test_20171210_191004
00:00:03 test_20171210_191007
00:00:02 test_20171210_191009
00:00:00 test_20171210_191009
00:00:04 test_20171210_191013
00:00:03 test_20171210_191016
00:00:01 test_20171210_191017
00:00:02 test_20171210_191019
00:00:01 test_20171210_191020
00:00:00 test_20171210_191020
Sponsored Links

じゃ、moreutilsが入ってない環境だとどうすればいいんだということで、とりあえずawkで書いてみることにした。

cmd | TZ=UTC awk 'BEGIN{x=systime()}{print strftime("%H:%M:%S",systime()-x),
cmd | TZ=UTC awk 'BEGIN{x=systime()}{print strftime("%H:%M:%S",systime()-x),$0}{fflush()}' # 作業全体の経過時間
cmd | TZ=UTC awk 'BEGIN{x=systime()}{z=systime();print strftime("%H:%M:%S",z-x),$0;x=systime()}{fflush()}' # 直前の出力からの経過時間
}{fflush()}' # 作業全体の経過時間 cmd | TZ=UTC awk 'BEGIN{x=systime()}{z=systime();print strftime("%H:%M:%S",z-x),
cmd | TZ=UTC awk 'BEGIN{x=systime()}{print strftime("%H:%M:%S",systime()-x),$0}{fflush()}' # 作業全体の経過時間
cmd | TZ=UTC awk 'BEGIN{x=systime()}{z=systime();print strftime("%H:%M:%S",z-x),$0;x=systime()}{fflush()}' # 直前の出力からの経過時間
;x=systime()}{fflush()}' # 直前の出力からの経過時間
blacknon@BS-PUB-UBUNTU-01:~$ yes 'echo test_$(date +%Y%m%d_%H%M%S);sleep $((RANDOM%5))' | head -10 | bash | TZ=UTC awk 'BEGIN{x=systime()}{print strftime("%H:%M:%S",systime()-x),
blacknon@BS-PUB-UBUNTU-01:~$ yes 'echo test_$(date +%Y%m%d_%H%M%S);sleep $((RANDOM%5))' | head -10 | bash | TZ=UTC awk 'BEGIN{x=systime()}{print strftime("%H:%M:%S",systime()-x),$0}{fflush()}'
00:00:00 test_20171210_191718
00:00:01 test_20171210_191719
00:00:03 test_20171210_191721
00:00:06 test_20171210_191724
00:00:09 test_20171210_191727
00:00:09 test_20171210_191727
00:00:13 test_20171210_191731
00:00:17 test_20171210_191735
00:00:19 test_20171210_191737
00:00:19 test_20171210_191737
blacknon@BS-PUB-UBUNTU-01:~$ yes 'echo test_$(date +%Y%m%d_%H%M%S);sleep $((RANDOM%5))' | head -10 | bash | TZ=UTC awk 'BEGIN{x=systime()}{z=systime();print strftime("%H:%M:%S",z-x),$0;x=systime()}{fflush()}'
00:00:00 test_20171210_191827
00:00:01 test_20171210_191828
00:00:04 test_20171210_191832
00:00:01 test_20171210_191833
00:00:02 test_20171210_191835
00:00:04 test_20171210_191839
00:00:03 test_20171210_191842
00:00:02 test_20171210_191844
00:00:02 test_20171210_191846
00:00:01 test_20171210_191847
}{fflush()}' 00:00:00 test_20171210_191718 00:00:01 test_20171210_191719 00:00:03 test_20171210_191721 00:00:06 test_20171210_191724 00:00:09 test_20171210_191727 00:00:09 test_20171210_191727 00:00:13 test_20171210_191731 00:00:17 test_20171210_191735 00:00:19 test_20171210_191737 00:00:19 test_20171210_191737 blacknon@BS-PUB-UBUNTU-01:~$ yes 'echo test_$(date +%Y%m%d_%H%M%S);sleep $((RANDOM%5))' | head -10 | bash | TZ=UTC awk 'BEGIN{x=systime()}{z=systime();print strftime("%H:%M:%S",z-x),
blacknon@BS-PUB-UBUNTU-01:~$ yes 'echo test_$(date +%Y%m%d_%H%M%S);sleep $((RANDOM%5))' | head -10 | bash | TZ=UTC awk 'BEGIN{x=systime()}{print strftime("%H:%M:%S",systime()-x),$0}{fflush()}'
00:00:00 test_20171210_191718
00:00:01 test_20171210_191719
00:00:03 test_20171210_191721
00:00:06 test_20171210_191724
00:00:09 test_20171210_191727
00:00:09 test_20171210_191727
00:00:13 test_20171210_191731
00:00:17 test_20171210_191735
00:00:19 test_20171210_191737
00:00:19 test_20171210_191737
blacknon@BS-PUB-UBUNTU-01:~$ yes 'echo test_$(date +%Y%m%d_%H%M%S);sleep $((RANDOM%5))' | head -10 | bash | TZ=UTC awk 'BEGIN{x=systime()}{z=systime();print strftime("%H:%M:%S",z-x),$0;x=systime()}{fflush()}'
00:00:00 test_20171210_191827
00:00:01 test_20171210_191828
00:00:04 test_20171210_191832
00:00:01 test_20171210_191833
00:00:02 test_20171210_191835
00:00:04 test_20171210_191839
00:00:03 test_20171210_191842
00:00:02 test_20171210_191844
00:00:02 test_20171210_191846
00:00:01 test_20171210_191847
;x=systime()}{fflush()}' 00:00:00 test_20171210_191827 00:00:01 test_20171210_191828 00:00:04 test_20171210_191832 00:00:01 test_20171210_191833 00:00:02 test_20171210_191835 00:00:04 test_20171210_191839 00:00:03 test_20171210_191842 00:00:02 test_20171210_191844 00:00:02 test_20171210_191846 00:00:01 test_20171210_191847

 


Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*