データファイルの内の一部を解析したい

そんなときのお話。

ls

とすると、ファイルがズラッと並ぶ。
例えばこんな感じになるかも知れない。

xx000015  xx000103  xx000219  xx000340	xx000476  xx000610  xx000741  xx000873
xx000030  xx000136  xx000247  xx000374	xx000510  xx000643  xx000774  xx000907
xx000048  xx000166  xx000277  xx000408	xx000544  xx000676  xx000807  xx000940
xx000074  xx000193  xx000307  xx000443	xx000577  xx000709  xx000840  xx000975

一応数字はデータの順序を表しているけど、いつもこの値で出力されるわけじゃない。値の大小だけが問題である。
また、出力ファイル数もまちまちだとする。

そんなとき、いくつかのファイルを選んで解析することは、細かい流れではなく大まかな流れを把握するのによいだろう。
そんなときのためのまとめ。

script @ perlをこんな風に書く。
気持ちは
・~$noutの数だけ解析する
・最後のファイルは絶対に解析する。

my $nout = 9;
my $nfile = `ls | wc -w`;

open ( INFILE, "ls |");
my @files = <INFILE>;
close (INFILE);

my $i = 0;

my $offset = $nfile % 9;
my $pstep = int ( $nfile / $nout ); 

foreach $files (@files) {
    $i++;
    if ( ( $i - $offset ) % $pstep == 0) {
	$j++;
	##解析スクリプト##
        chomp $files;
	print "$files \n";
        ##ここまで##
    }
}

ポイント

ファイルの総数のチェック
ls | wc -w

とても便利。

ファイルネームをscript内の変数にする
open (FILE,"ls |");
@filename = <FILE>;
close (FILE);

によって実装することができる。
パイプを入れてあげるのがポイント。
他にも

@filename = `ls`;

で実装できる。