App-Bin4TSV
view release on metacpan or search on metacpan
scripts/gzpaste view on Meta::CPAN
#!/usr/bin/perl
use 5.001 ; use strict ; use warnings ;
use Getopt::Std ; getopts '!@:3d:grt:' , \my %o ;
use Term::ANSIColor qw [ :constants color ] ; $Term::ANSIColor::AUTORESET = 1 ;
use autodie qw[ open ] ;
use PerlIO::gzip ;
use FindBin qw[ $Script ] ;
use Time::HiRes qw[ time ] ; # <-- ãã®éæ¨æºã¢ã¸ã¥ã¼ã«ãæªã¤ã³ã¹ãã¼ã«ãªãã©ããã?
sub files_open ( ) ;
sub main_body ( ) ;
sub closing ( ) ;
sub cyc_rep ( $ ) ;
$/ = "\r\n" if $o{r} ;
$o{f} //= 0 ; # ãã¡ã¤ã«ãèªã¿ã¨ç¡ãã¨ãã«ãä½åã¾ã§èªã¿ç´ãã許容ãããã
$| = 1 if $o{'!'} ;
my $osep = do { $o{d} //= $ENV{osep} // "\t" ; eval qq[qq[$o{d}]] } ; # åºåæã®åºåãæå
my @FH ; # ãã¡ã¤ã«ãã³ãã©ã®é
å
my $argnum = scalar @ARGV ;
my $out_ln = 0 ; # åºåè¡æ°
my $cyc_len = $o{'@'} // 1e5 ; # ä½è¡æ¯ã«ã¬ãã¼ããçºçããããã
my ( $time00 , $time0 ) = ( time ) x 2 ; # è¨ç®æé測å®ç¨
files_open ( ) ;
main_body ( ) ;
closing ( ) ;
exit 0 ;
## 以ä¸ã¯é¢æ°ã
sub files_open ( ) {
$SIG{INT} = sub { closing ; exit 130 } ;
for ( 0 .. $argnum - 1 ) {
if ( ! $o{g} ) {
open $FH [ $_ ] , '<' , $ARGV [ $_ ] ; # "<:gzip(gzip)"
binmode $FH [ $_ ] , ':gzip(gzip)' ; # < -- é度æ¯è¼ãããã
}
else {
open $FH [ $_ ] , '-|' , 'gzcat' , $ARGV[$_] ; # open $FH, "gzcat '$ARGV[$_]' |" ããè¯ãã¨æã£ã
}
}
}
sub closing ( ) {
# ãã¡ã¤ã«ãéããã
close $_ for @FH ;
# 2次æ
å ±ãæ¨æºã¨ã©ã¼åºåã«åºåããã
my $sec = time - $time00 ;
$sec = sprintf $o{3} ? '%0.3f' : '%0.0f' , $sec ;
$out_ln =~ s/(?<=\d)(?=(\d\d\d)+($|\D))/,/g ; # 3æ¡æ¯ã«ã³ã³ãã§åºåã
print STDERR CYAN $out_ln , " " ;
my $dtfmt = dtfmtlocal () ;
print STDERR GREEN "$out_ln lines output. $sec sec in total ($Script $dtfmt)\n" ;
}
sub main_body ( ) {
my $tolerance = $o{t} ;
while ( 1 ) {
my @out ;
my $readables = 0 ;
for ( 0 .. $argnum - 1 ) {
my $fh = $FH [ $_ ] ;
my $str = <$fh> ;
defined $str ? $readables ++ : ( $str = '' ) ;
push @out , $str ;
}
if ( $readables == 0 ) {
$tolerance -- ;
last if $tolerance < 0 ;
print STDERR RED "An unreadable line occurs after readin $out_ln lines.\n" ;
next
}
chomp @out ; # åè¦ç´ ã«ã¤ãã¦è¡æ«ã®æ¹è¡æåãé¤å»ããã
print "$out_ln:\t" if $o{':'} ; # è¡çªå·ã®åºå
print join ( $osep , @out ) , "\n" ;
cyc_rep ( $out_ln ) if ++ $out_ln % $cyc_len == 0 ; # <-- "++" ã«è¦æ³¨æãä¿å®æã«ããã¦ã
}
}
sub cyc_rep ( $ ) {
local $| = 1 ;
(my$num=$_[0]) =~ s/(?<=\d)(?=(\d\d\d)+($|\D))/,/g ; # 3æ¡æ¯ã«ã³ã³ãã§åºåã
my $time_shown = sprintf '%02d:%02d:%02d' , ( localtime ) [2,1,0] ;
my $sec = time - $time0 ;
$sec = sprintf $o{3} ? '%0.3f' : '%0.0f' , $sec ;
$time0 = time ;
print STDERR GREEN $num , ":\t" , $time_shown ;
print STDERR GREEN "\t" , $sec , " sec.\t($Script)" ;
print STDERR RESET "\n" ;
}
( run in 1.533 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )