ファイルから指定した行間だけを抜き出すスクリプト pickup.pl を作成した。ログファイルなど、非常にサイズの大きいファイルをエディタで見ると、エディタがメモリ不足でまともに動かないことがあるので、必要な行間だけをピックアップして見たい時に使用すると良いと思う。
使い方は、例えば以下のように、ピックアップの開始行、終了行、対象のファイルパスを指定する。
perl pickup.pl -s 1000 -e 2000 bigSize.log
(bigSize.logの1000~2000行目をピックアップする)
ピックアップ結果は、bigSize.log があるディレクトリ配下に pickuped_bigSize.log として作成される。
pickup.pl
use strict; use warnings; use Getopt::Long 'GetOptions'; use File::Basename; my $start; my $end; GetOptions( 'start=s' => \$start, 'end=s' => \$end, ); unless (($start =~/\d+/) and ($end =~/\d+/)) { die "Start and end should be digit..."; } if ($end < $start) { die "End should be bigger than start..."; } my $inFile = $ARGV[0]; if (! -f $inFile) { die "There is not $inFile file..."; } my $outFile = createOutputFilePath($inFile, "pickuped_"); open(my $inFh, "< $inFile") or die("Error :$!"); open(my $outFh, "> $outFile") or die("Error :$!"); my $lineNum = 1; foreach my $line (<$inFh>) { if($start <= $lineNum and $lineNum <= $end) { print($outFh $line); } $lineNum++; } close($inFh); close($outFh); sub createOutputFilePath { my ($inputFilePath, $suffix) = @_; my ($name, $dir) = fileparse($inputFilePath); my $outputFilePath = $dir . $suffix . $name; }