App-Bin4TSV
view release on metacpan or search on metacpan
scripts/wc-l view on Meta::CPAN
use Encode::JP ;
eval "use PerlIO::gzip;1" or die "Can't import PerlIO::gzip despite -z instruction. ($Script)\n" if $o{z} ;
sub main ( ) ; # å
¥åãé æ¬¡å¦çãã
sub eachFile ( $ ) ; # 弿°ã§æå®ãããåãã¡ã¤ã«ãå¦çãã¦ãè¡æ°ãè¿ãã
sub lineNum ( $ ) ; # (åãã¡ã¤ã«ããä¸ãããã) ãã¡ã¤ã«ãã³ãã«ãããè¡æ°ãè¿ãã
sub sigint ( ) ; # Ctrl-C ãæ¼ä¸ãããæã®å¦ç
sub hhmmss ( ) ; # ç¾å¨æå»ã yyyy-mm-dd HH:MM:SS ã®å½¢ã§è¿ãã
sub cyc_rep ( ) ;
$/ = "\r\n" if $o{r} ;
#$/ = "" ;
$| = 1 if $o{'!'} ;
* CYAN = * BRIGHT_CYAN = * BLUE = * BRIGHT_BLUE = sub { @_ } if $o{b} ; # <-- TRICKY A LITTLE.
my ($time0, $time00) = (time) x 2 ;
my $cyc_sec = $o{'"'} // 10 ; # ä½è¡æ¯ã«ã¬ãã¼ããçºçããããã
my $cyc_last_line ; #
my $noLineEnd = 0 ; # è¡æ«ã®æåãæ¹è¡(æ£ç¢ºã«ã¯ $/ ) ã«ä¸è´ããªãã£ããã¡ã¤ã«ã®åæ°
my $dirnum = 0 ; # ãã£ã¬ã¯ããªã®åæ°
my $fn ; # èªãã§ãããã¡ã¤ã«ã®åå
my $FH ; # ãã¡ã¤ã«ãã³ãã«
main ;
exit 0 ;
sub main ( ) {
my $time00 = time ;
my $total_lines = 0 ; # å
¨ãã¡ã¤ã«ã®è¡æ°ã®åè¨
@ARGV = ( '-' ) unless @ARGV ;
$SIG{INT} = \& sigint ; ## \sigint
$total_lines += eachFile $_ for @ARGV ;
* BLUE = * BRIGHT_BLUE ; # <-- - TRICKY !
#my $fn ; # åè¨ã®é
ç®ã§ãããã¨ã表ãæåå
$fn = (scalar @ARGV - $dirnum). " files" ;
$fn .= " plus $dirnum directories" if $dirnum > 0 ;
$fn = "[- $fn -]" ;
out1line ( dualvar ($total_lines , -"$noLineEnd" ) , $fn , $time00 ) if @ARGV >= 2 ; # 1åããå
¥åãç¡ãå ´åã¯åºããªãã
}
# åãã¡ã¤ã«ã«å¯¾ããdualvarã§è¡æ°ã¨EOFç¶æ
ãè¿ãããã¡ã¤ã«åããè¡æ°ãè¿ã颿°ãèµ·åãããããåºåãã颿°ãèµ·åããã
sub eachFile ( $ ) {
my $time0 = time ;
$fn = $_[0] ;
# ãã¡ã¤ã«ãã³ãã©ãè¨å®ã"-" ãªãæ¨æºå
¥åã
if ( $_[0] ne "-" ) {
if ( ! $o{g} ) {
open $FH , '<' , $_[0]
} else {
open $FH , '-|' , 'gzcat' , $_[0] ;
#open $FH [ $_ ] , '-|' , 'gzcat' , $ARGV[$_] ; # open $FH, "gzcat '$ARGV[$_]' |" ããè¯ãã¨æã£ã
}
} else {
$FH = * STDIN
} ;
binmode $FH , ":gzip(gzip)" if $o{z} ;
my $header = <$FH> if $o{'='} ; # <-- ä¸å¿æå³ã¯ããã-+ ã¹ã¤ãããªãã·ã§ã³ã§å¯¾å¿ã§ããªãã?
my $ret = lineNum $FH ;
out1line ( $ret , $fn , $time0 ) ;
return $ret ;
}
# ãã¡ã¤ã«ãã³ãã©ããè¡æ°ãè¿ãã
sub lineNum ( $ ) {
my $last_count = $. ;
my $FH = $_[0] ;
my $count = 0 ;
my $final_line = '' ; # 次ã®è¡ã§ä½ãèªã¿åããªãå ´åã®å¯¾çã¨ãã¦ã '' ã代å
¥ã
if ( -d $_[0] ) { $dirnum++ ; return dualvar (0, 'dir.') } ;
$SIG{ALRM} = sub { cyc_rep ; alarm $cyc_sec } ;
alarm $cyc_sec ;
while ( <$FH> ) { $final_line = $_ };
$count = $. - $last_count ; # é«éåã®ãããç´åã®ã«ã¼ãã§æ°ãããã¨ã¯ãããã
alarm 0 ;
#$cyc_last_line = 0 ; # <-- å ´æã¯ããã§è¯ãã£ãã®ã ããã
#$. = 0 ;
unless ( chomp $final_line ) { $noLineEnd ++ ; return dualvar $count , $count ? '-1' : '-0' } ;
return dualvar $count , '' ; # <-- æ¹è¡ã§çµãã£ã¦ããã°ã空æåãæååã³ã³ãã¯ã¹ãã®é¨åã«ä¸ããã
}
# åºåããåè¡ã«ã¤ãã¦ã®å¦çã
sub out1line ( $$$ ) { # 弿°ã¯ã$ret , $fn , $time0
my @out ;
my $lines = $_[0] + 0 ; # Util::Scalar ã«ãã dualvar å½¢å¼ã®å¤ãããæ°ã³ã³ããã¹ãã§æ°ãåãåºãã
$lines =~ s/(?<=\d)(?=(\d\d\d)+($|\D))/,/g if $o{3} ; # 3æ¡æ¯ã«ã³ã³ãã§åºåã
$lines = substr ( ' ' x $o{d} . $lines , - $o{d} , $o{d} ) if $o{d} ;
push @out , $lines if ! $o{'~'} ;
push @out , $_[1] if ! $o{n} ; # ãã¡ã¤ã«å
push @out , $lines if $ o{'~'} ;
do { my $sec = time - $_[2] ; my $dt = hhmmss ; push @out , BLUE "[${sec} sec. $dt]" } if ! $o{s} ;
push @out , $_[0] . '' if $_[0] ne "0" ; # dualvar ã ãã .'' ã®æä½ã§æååãæ½åºããå¿
è¦ãããã
print join ( "\t" , grep { $_ ne '' } @out ) , "\n" ;
}
# Ctrl-C ãæ¼ä¸ãããæã®å¦ç
sub sigint ( ) {
alarm 0 ;
print STDERR YELLOW sprintf ( " [ %0.3e ]-th line in [ $fn ]", $. ) , " read by '$Script'. " . hhmmss . "\n" ;
$SIG{INT} = sub { print STDERR BRIGHT_YELLOW " $. [ $fn ] " , "'$Script' " , hhmmss , "\n" ; close $FH ; exit 130 } ;
alarm 1 ;
my $tmp = $SIG{ALRM} ;
$SIG{ALRM} = sub { $SIG{INT} = \& sigint ; $SIG{ALRM} = $tmp ; alarm $cyc_sec } ; # <-- perl ç±æ¥ã®ãã©ãã«ãèµ·ãã¾ããããã«ã
}
# ç¾å¨æå»ã HH:MM:SS ã®å½¢ã§è¿ãã
sub hhmmss ( ) {
my @f = @{[localtime]}[5,4,3,2,1,0] ;
$f[0] += 1900 ;
$f[1] += 1 ;
return sprintf ( "%02u:%02u:%02u" , @f[3..5] ) ;
#return sprintf ( "%04u-%02u-%02u %02u:%02u:%02u" , @f ) ;
}
sub cyc_rep ( ) {
use FindBin '$Script' ;
( run in 0.529 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )