App-timeput
view release on metacpan or search on metacpan
#!/usr/bin/perl
use 5.008 ; use strict ; use warnings ;
use Getopt::Std ;
use Getopt::Long qw [ GetOptions :config bundling no_ignore_case pass_through ] ; # GetOptionsFromArray ] ;
use Time::HiRes qw[ gettimeofday tv_interval sleep ] ; # Perl 5.7.3ããã³ã¢ã¢ã¸ã¥ã¼ã«
use Term::ANSIColor qw[ color :constants ] ; $Term::ANSIColor::AUTORESET = 1 ;
use FindBin qw[ $Script ] ;
sub FB ($){FAINT BOLD $_[0]}
sub Y ($){YELLOW $_[0]}
GetOptions 'sleep=f' => \my$sleep ;
getopts ".:b:c:dgsz:" , \my %o ;
my ($t0s,$t0p) = gettimeofday ; # ãèµ·åããæå»ãã®è¨é²ã15ãã¤ã¯ãç§ã®ãªã¼ãã¼ããã
$ENV{TZ} //= $o{z} ; # ã¿ã¤ã ã¾ã¼ã³
## Ctrl+Z æ¼ä¸ã«å¯¾ããåå¿ ã®æå®
sub cZ { say STDERR CYAN "$. line(s) output so far. ($Script $$)" ; $SIG{TSTP} ='DEFAULT' ; kill 'TSTP', $$ } ;
$SIG{TSTP} = sub { cZ } ;
$SIG{CONT} = sub { $SIG{TSTP} = sub { cZ } } ;
$| = 0 eq ($o{b}//'') ? 0 : 1 ; # -b 0 ã®è¨å®ã§ããããã¡ãªã³ã°ãããªãã($| != 0 ãªããã ã¡ã«åºåã)
## --sleep ç§æ°(ãã¤ã¯ãç§åä½) ã§ã®åã
do { & proc_sleep ; exit } if defined $sleep ;
sub proc_sleep () {
while ( <> ) {
do { my $s = $sleep * $. - tv_interval( [$t0s,$t0p] , [gettimeofday] ) ; sleep $s > 0 ? $s : 0 } ;
print $_ ; # print 㯠2 ã 5 ããªç§åä½ã«æéããããã
}
}
#$o{'.'} //= 3 ; # ç§æ°ã®å°æ°ç¹ä»¥ä¸æ¡æ°ã®è¨å®
my $dig = $o{'.'} // 0 ; # æ¡æ° (表示ããç§ã®å°æ°ç¹ä»¥ä¸ã®æ¡æ°)
my $lay = 1e6 / 10 ** $dig if defined $dig ; # lay ã¯è±èªã®ãç½®ããã®ã¤ããã100䏿ªæºã®ãã¤ã¯ãç§ã«å¯¾ãã¦ãå²ãæ°ã
* gapproc = $o{g} ? sub (){ ($t0s, $t0p) = gettimeofday } : sub (){} ; # 50ããç§ã®ãªã¼ãã¼ãããã1åã®å®è¡ã«ã¤ãã
my $HMS0 = '%02d:%02d:%02d' ; #ãä½åº¦ã使ãããæ¸å¼
my $HMSd = "$HMS0.%0${dig}d" ; #ãä½åº¦ã使ãããæ¸å¼
my $dHMS0 = "%02d-%02d-%02d $HMS0" ;
my $dHMSd = "%02d-%02d-%02d $HMSd" ;
do { & main ; exit } ;
sub hms0 () { sprintf $HMS0 , @{[localtime]}[2,1,0] }
sub hmsD () { my($s,$m)=gettimeofday ; sprintf $HMSd, @{[localtime $s]}[2,1,0], int $m/$lay }
sub Dhms0 () { my @f=localtime;$f[4]+=1;$f[5]+=1900 ; sprintf $dHMS0 , @f[5,4,3,2,1,0] }
sub DhmsD () { my($s,$m)=gettimeofday ; my @f=localtime $s;$f[4]+=1;$f[5]+=1900 ; sprintf $dHMSd , @f[5,4,3,2,1,0],int $m/$lay }
sub secondsSince0 () { return sprintf "%0.0f" , time - $t0s }
sub secondsSinceD () { return sprintf "%0.${dig}f" , tv_interval [ $t0s, $t0p ] } ;
sub timenow () ;
sub main () {
* timenow = $o{d} ? $dig ? * DhmsD : *Dhms0 : $dig ? * hmsD : * hms0 ;
* timenow = $o{'.'} ? * secondsSinceD : * secondsSince0 if $o{s} || $o{g} ;
my $C = defined $o{c} ? $o{c} eq 0 ? '' : color $o{c} : color 'faint bold' ; # çºè²ããã
my $R = defined $o{c} ? $o{c} eq 0 ? '' : color 'reset' : color 'reset' ; # çºè²ããå ´åã¯ãè²ããªã»ããããã
while (<>) { my $t = timenow ; print "$C$t$R\t$_" ; & gapproc } ;
}
## ãã«ãã®æ±ã
sub VERSION_MESSAGE {}
sub HELP_MESSAGE{
use FindBin qw[ $Script ] ;
$ARGV[1] //= '' ;
open my $FH , '<' , $0 ;
while(<$FH>){
s/\$0/$Script/g ;
print $_ if $ARGV[1] eq 'opt' ? m/^\ +\-/ : s/^=head1// .. s/^=cut// ;
}
close $FH ;
exit 0 ;
}
=encoding utf8
=head1
timeput
å
¥åã1è¡ãã¤èªã¿ããã®åè¡ã®å
é ã«ãèªã¿åã£ãæç¹ã®æå»ãã¿ãåºåãã§åºåããã
ãã ãã"-w ç§æ°" ã®æå®ã«ããã1è¡èªãã§åºåãã¦ãæå®ç§æ°åä½ãæ¢ãã(sleepãã)ã
Ctrl+Z ã§æä½ã䏿ãã2次æ
å ±ã¨ãã¦ä½è¡ã¾ã§èªãã ã®ãã表示ããã
ãªãã·ã§ã³ :
-b 0 : åºåã®ãããã¡ãªã³ã°ãããªãã(Buffering)
-c STR : è²ã®æå®ã0ã§è²ç¡ãã"cyan","faint red bold","bright_blue"ãªã©ãè²åã¯Term::ANSIColor ãåç
§ã
-d : æ¥ä»ãåºåãyyyy-mm-dd HH:MM:SS å½¢å¼ã§ã(date)
-g : éå§ããã®ç§æ°ã§ãªãã¦ã1è¡ãã¨ã®ééç§æ°ã表示ã(gap)
-s : èµ·åãã¦ããã®ç§æ°ãåºåã(start)
--sleep N : å
¥åãã1è¡ãã¤é次èªã¿åãåºåãã¦ãNç§åæ¢ãããã¨ãç¹°ãè¿ãã
-z STR : ã¿ã¤ã ã¾ã¼ã³ã®è¨å®ã"Asia/Tokyo", "-9", "-9:00", "JST-9" ãªã©ãè¨å®ã§ããã(ã·ã¹ãã ä¾å)
-. N : ç§æ°ãå°æ°ç¹ä»¥ä¸ N æ¡åºåããã0ãã6ã®æ´æ°å¤ã使ãããæªæå®ãªã3ã(-d ã¨ã¯ä¸¡ç«ããªãã)
å©ç¨ä¾ :
yes | head | timeput -.6
yes | head | timeput -d | sed 's/ /T/' # POSIXã®æ¥æå½¢å¼ã«ãããå ´åããã®sedæã¯æåã®ç©ºç½æåã®ã¿Tã«å¤æ´ã
seq 5 | timeput -.6 | timeput -s.6 | timeput -g.6
seq 10 | timeput -w0.45 | timeput -g.3 # 0.45ç§ãã¤1è¡ãèªã¿åãã
command 1> output1.txt 2> >( timeput error.log ) # command ã¯æ¨æºã¨ã©ã¼åºåã«ä½ãåºåãããããã°ã©ã ã§ããã便å©ã
éçºã¡ã¢:
* -w ã®åä½ãé«åº¦åãããã-w 2,0.2x10,0 ã¨æå®ãããã¨ã§æåã¯2ç§ã次ã«10åã¯0.2ç§ãæ®ãã¯å³åº§ã®ããã«ã,ã¯+ãxã¯*ã§ãå¯ã¨ãããã
* -3 ã®ãªãã·ã§ã³ãä½ããããtimeput -3 ã§ timeput -g | timeput -s | timeput ã¨ããªãæ©è½ãæããããã
* ååã timeput (ã¿ã¤ã ããã)ã§ã¯ãªããputtime ã®æ¹ããããã¿ã¤ã ãã§çºé³ããããæ°ãããããã®æ¹ãè¨æ¶ããããããã
* ã¿ã¤ã ã¾ã¼ã³ã®è¨å®ã«ã¤ãã¦ã -z ãæç¤ºçã«å¿
è¦ãªããã (Macã®å ´å)ã
=head1 AUTHOR
ä¸éå¯¿ä¹ Toshiyuki SHIMONO <bin4tsv@gmail.com>
=head1 COPYRIGHT AND LICENSE
Copyright (c) 2021-2023 Toshiyuki SHIMONO. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut
( run in 1.229 second using v1.01-cache-2.11-cpan-39bf76dae61 )