App-colsummary

 view release on metacpan or  search on metacpan

colsummary  view on Meta::CPAN

  sub filePinfo ; # ファイル毎の2次情報(一行サマリ)
  sub ColFreq ( $$ ) ; # 第1変数はファイルハンドル 第2変数は参照 ;  各列の値の分布を取り出す

## 全体で使う変数
my $optu0 = exists $o{u} && $o{u} eq 0 ; 
* decode = * decode_utf8 ; 
* decode = sub ( $ ) { $_[0] } if $optu0 ; 
#* decode = (! $optu0) ? * decode_utf8 : sub ($){ $_[0] } ; #* encode = $o{u} ? * encode_utf8 : sub ($){ $_[0] } ; 
my $optR0 = defined $o{R} && $o{R} eq 0 ;
* R0proc = $optR0 ? sub {} : sub { s/\r$// } ;  # -R0 が指定された時の処理
binmode *STDOUT , ':utf8' unless $optu0 ; # これだけ全体で使う変数とは言いがたいかもしれないが、オプションの処理はこの節の前半にあるので。
$| = 1 if $o{'!'} ;
$o{g} //= 6 ; # if ( ! defined $o{g} ) ; # 取り出す数
$o{r} //= "~" ; # 範囲を表す記号(出力で使う)
$o{c} //= '|'  ; # 範囲を示す表示を複数繋げる記号(出力で使う)
$o{'#'} = decode ( $o{'#'} ) if defined $o{'#'} ; # 除外する正規表現
push @ARGV , '-' unless @ARGV ; # 標準入力の追加
my $isep = $o{i} // "\t" ;  # 入力の区切り文字 $o{','} = do { $o{','} //= "\t" ; eval qq[qq[$o{','}]] } ;
my $sec = $o{'@'} // 15 ; # 何秒ごとにレポートを表示させるか
my $nc = 0 ; # 計数対象としなかったセルの数をカウント。
my $rl ; # 各ファイルの読んだ行数を格納。

colsummary  view on Meta::CPAN

} ;
$SIG{ INT } = ${ INT1 } ;
$SIG{ ALRM } = sub { say STDERR GREEN + (d3 $rl) . " lines read. " , scalar localtime ; alarm $sec } ; 
alarm $sec ; 

eachFile $_ for @ARGV ;
exit 0 ;

## 1個ずつファイルを読み取る。
sub eachFile ( $ ) {
  #my $FH = do { my $t = *STDIN if $_[0] eq '-' ; open $t, '<', $_[0] if!$t ; binmode $t , ':gzip(gzip)' if $o{z} ; $t } ; # ファイルハンドルの取得
  my $FH = do{my$t;if($_[0]eq'-'){$t=*STDIN}else{open$t,'<',$_[0]} ; binmode $t , ':gzip(gzip)' if $o{z} ; $t } ; # ファイルハンドルの取得
  $rl = 0 ; # 各ファイルの読み取った行数
  # 1. 最初の列名の並びを読み取り: 
  my @colnames =  colnames $FH if $o{'='} ; 
  # 2. データの中身を読み取りつつ、返る値は「列数」。
  my $maxCols = ColFreq $FH, my $colvals ; #my $colvals ; 各列の各データ値の度数を集計;$colvals->[列番-1]{データ値}=度数 
  close $FH  ;
  # 3. 出力をする
  AlignOut @{ $fOut{$o{j}?'j':'e'} } if 0 ne ($o{0}//'') ; 
  defined $colvals->[$_] and ColStat $colvals->[ $_ ] , $colnames[$_] for 0 .. $maxCols - 1  ; # オプション -0 により全ての値が除外されることは起こりうる。 
  # 4. 2次情報を出力する。



( run in 0.389 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )