Bin-Subtotal
view release on metacpan or search on metacpan
scripts/summing view on Meta::CPAN
my $sum = 0 ; # æ±ãããåè¨å¤
my $lln = 0 ; # å ç®å¯¾è±¡ã¨ãªã£ãè¡ã®æ°
my $nlln = 0 ; # éå ç®å¯¾è±¡ã®è¡ã®æ°
my $header = undef ; # -= ãæå®ãããå ´åã«ãããè¡ãæ ¼ç´ã
my $fp = $o{f} >=0 ? $o{f} - 1 : $o{f} if defined $o{f} ; # ã©ã®åãæ½åºããã
my $fps = $fp >=0 ? $fp + 1 : 0 if defined $o{f} ; # splitã§ä½¿ãã
my ${ ctrl_c } = sub {
$Term::ANSIColor::AUTORESET = 0 ;
my $lt = sprintf '%04d-%02d-%02d %02d:%02d:%02d' , do {my @t = @{[localtime]}[5,4,3,2,1,0] ; $t[0]+=1900 ; $t[1]++ ; @t } ;
my $ln = $. ; $ln =~ s/(?<=\d)(?=(\d\d\d)+($|\D))/,/g ; # 3æ¡æ¯ã«ã³ã³ãã§åºåã
say ITALIC DARK BOLD sprintf " The current result ($lt): %s lines have been processed." , $ln ;
printOutput ;
say YELLOW 'Push Ctrl+\ or Ctrl+Z to stop the calculation.' ;
print RESET '' ;
} ;
readInput ;
printOutput ;
exit 0 ;
sub readInput () {
chomp ( $header = <> ) if $o{'='} ; # ãããè¡
$SIG{ INT } = $ { ctrl_c } ;
# åã°ãã/ã·ã³ãã«ãã¼ãã«ã使ã£ã¦ã¿ãã
#my $org ; # å
¥åã®å
ã®æåå
* orgStore = defined $o{1} && $o{1} ? sub { @_ = ($_) } : sub { @_ = () } ;
* colChoose = defined $fp ? sub { $_ = [ split ] -> [ $fp ] } : sub { } ;
* caseHex = defined $o{h} ? sub { $_ = hex $_ } : sub {} ;
* outOfCount = defined $o{c} && $o{c} == 0 ? sub { } : sub { do { $nlln ++ ; goto LOOP } if ! & get_num } ;
* theSumming = $o{h} ? sub { $sum += $_ } : sub { $sum = "$sum" + "$_" } ;
* get_num = $o{g} ? sub { m/[-\.\d]+/ ; $_ = $& ; looks_like_number $_ } : sub { looks_like_number $_ } ;
* progress = defined $o{1} && $o{1} eq '0' ? sub { () } :
! $o{'~'} ? sub{ s/(^|[^0123456789.eEfF+-])(\d+)/$1+$2/g ; "$sum"."\t<= $_" } : # eEfFãªã©ã¨ããé¨åã¯ããã§è¯ãã®ã?
sub { s/(^|[^+-0123456789.eEfF+-])(\d+)/$1+$2/g ; "$_\t"."=> $sum" } ;
* doPrint = defined $o{1} && $o{1} eq '0' ? sub { } : sub { say join "\t" , @_ } ;
LOOP : while( <> ) {
chomp ;
& orgStore ;
& colChoose ;
& caseHex ;
& outOfCount ; # LOOPã«ã¸ã£ã³ããããã¨ãããã
& theSumming ; # <-- ããã§è¶³ãç®ã®è¨ç®ããã
#$sum = "$sum" + "$_" ;
#$sum = "$sum + $_ ;
$lln ++ ;
unshift @_ , & progress ;
# @_ = & progress ;
& doPrint ;
}
}
sub printOutput () {
#my $FH = $o{1} ? \* STDOUT : \*STDERR ; # <-- æå³ããã£ãã®ã???
select $o{1} ? \* STDOUT : \*STDERR ; # <-- æå³ããã£ãã®ã???
print $o{q}? '' : 'header=' , qq{'$header'\t} if $o{'='} ;
my $fmt = $o{q} ? "%s\t%d\t%g\t%s" : "%s <- sum ;\t%d + %d <- counted + not ; \t%s <- average ;" ;
#$fmt = "%50X <- sum ;\t%d + %d <- counted + not ;" if $o{h} ;
my $quot = $lln != 0 ? $sum/$lln : "NaN" ;
if ( "$quot" > $quot ) { $quot = "$quot" . '..(-)' }
elsif ( "$quot" < $quot ) { $quot = "$quot" . '..(+)' }
#if ( $o{h} ) { say sprintf( & hex8 ( $sum) ; return } ;
$sum = & hex8 ( $sum ) if $o{h} ;
say sprintf ($fmt , $sum, $lln, $nlln , "$quot") , sprintf "\t%0.6f sec calculation (summing)." , tv_interval ${ dt_start } ;
}
sub hex8 {
my @out = '' ;
my $n = $_ [0] ; $n = 0 if $n eq "NaN" ;
my $c = 12 ;
do {my $t = $n % 16**8 ; $n = int $n /16**8 ; unshift @out , sprintf "%08x" , $t ; say $n } while ($n != 0 && $c--) ;
my $out = join " " , @out ;
$out =~ s/^00+/0x 0/;
return $out ;
}
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
$0
å
¥åã®å¤ã1è¡ãã¤ã«åç´ã«è¶³ãåããããè£å©æ
å ±ã¨ãã¦ãä½è¡ãæ°ã¨ãã¦æ±ãããããå¹³åå¤ãªã©åºåããã
10鲿°ã§å ç®ãè¡ãã
æ°ãã©ããã®å¤å®ã¯ Scalar::Util ã® looks_like_number 颿°ã使ã£ã¦ãããå¤ã¯åç´ã«è¶³ãã¦ãããatof ãªã©ä½¿ã£ã¦ããªãã
åºå:
1. åè¨å¤
2. åè¨ã«ä½¿ãããæ°ã®åæ°
3. åè¨ã«ä½¿ãããªãã£ãè¡ã®æ°
4. å¹³åå¤
5. è¨ç®ã«ä½¿ã£ãç§æ°(å°æ°ç¹ä»¥ä¸6æ¡)
ãªãã·ã§ã³:
-= : æåã®è¡ããããã¨è¦ãªãããããä½ã§ãã£ãããæå¾ã«åºåããã
-1 0 : ç´¯è¨ã®éä¸ã®çµæã表示ããªãã
-1 1 : éä¸ã®çµæã«å ãã¦ãå
ã®å
¥åæååãå³å´ã«é£çµãã¦åºåã
-c 0 : æ°å¤ã§ãããã©ããã®ãã§ãã¯ãããªããé«éåã®ããã
-f N : AWKå½¢å¼ã§å
¥åã®åè¡ãåå²ã Nçªç®ã®åã®å¤ãåãåºãã
-g : æ°ã§ç¡ãã¨ããã§ããã ãæ°ã®é¨åãåãåºãã¦è¨ç®ããã
-h : å
¥åããæ°ã¯16鲿°ã¨ãã¦å¯¾å¿ã md5sum ã§ãã£ãªã¯ããªã®ä¸ã®ãã¡ã¤ã«ç¾¤ã®ä¸è´ãè¦ãã¨ã便å©ã
-q : åé·ãªæåå(sum=.. , ave=.. ãªã©) ã表示ããªãã
-~ : ç´¯è¨ã¨å¤ã®åºåé åºãå転ããã
-u : åºåã®ãããã¡ãªã³ã°ãããªãã
-f N : AWKå½¢å¼ã§åã«ãã©ãã©ã«ãã¦ã1å§ã¾ãã§å·¦ããNçªç®ãåãåºããè² ã®æ°ã¯-1ã ã¨æãå³ã®åã
éçºä¸ã®ã¡ã¢:
* [split " " , $_ , $fps] ããã¾ã ãããªãã£ãã®ã§ [split] ã¨ããããè¯ãã£ãã®ã?
--
* bin4tsv/summing å
é ã®æ°åã®ç´¯è¨åãåãåºãããã«ããªãããååå
¨æååã®è¡¨ç¤ºãè¡çªå·ã¨å
±ã«ããããã«ããã
* è¶³ãå ´æã®ãã£ã¼ã«ãçªå·ãAWKå½¢å¼ã§(AWKã®ç©ºç½åºåãã§)æå®ã§ããããã«ããã
* -Fã§åºåãæåãæå®ã§ããããã«ããã
=cut
( run in 0.639 second using v1.01-cache-2.11-cpan-39bf76dae61 )