2016-04-12 5 views
0

私はスクリプトを実行する必要がある私のリモートサーバ(ウィンドウ)にインストールされていないので、File:ReadBackwardsモジュールを使わずに、ファイルの最後の行だけを読む必要があります。 最後の行だけを読む最も効率的な方法を教えてください。Windows上でPerlを使用しているファイルの最終行を読み取るにはどうすればよいですか?

+0

はhttp://stackoverflow.com/questions/187587/looking-for-a-windows-equivalent-of-the-unix-tail-command#comment5036679_187826を見てみましょう – simbabque

+0

最も効率的な方法はにあります不足しているモジュールをインストールしてください。 –

+0

@DaveCrossありがとうと私も理解していますが、それは完全に私によって処理されていないリモートサーバーです。 – STJ

答えて

0

あなたは窓です。私はWindows用のinbuildコマンドが何であるか知らないが、あなたがしてみてください他

open my $fh ,"<","file.txt"; 
my $last_line; 
$last_line = $_,while (<$fh>); 
print $last_line; 

それを印刷したり、

反復whileループを使用してファイルハンドラを次のようにのようなものを試してみて、変数に出力を保存しますこれらは、より多くのメモリを消費します。

open my $fh ,"<","file.txt" or die "error opening $!"; 
my @ar = <$fh>; 
print $ar[-1]; 

さも

open my $fh ,"<","file.txt" or die "error opening $!"; 
my @ar = <$fh>; 
print pop @ar; 
+2

最後の行をポップするだけで、ファイル全体を配列に読み込むことは無駄に思えます。 – Sobrique

+0

@Sobriqueうん、それはより多くのメモリを消費する正しいです。私はwhileループを使って他のオプションを与えます。 – mkHun

+0

@mkHunファイルハンドラを使用すると、期待される出力が得られます。 – STJ

6

この回答はWindowsでは機能しません。


これは単発的な問題であれば、単にシステムコールを行い、tailを使用するだけです。

my $last_line = `tail -n 1 $filename`; 

あなたはこれをたくさん行う必要がある場合は、それを展開する前に、あなたのスクリプトに、リモートマシン上のローカル-libのにインストールを考える、またはfatpackingファイル:: ReadBackwards。

+0

母は同じ答えを同時に入力していたようです。ファットパックで素敵な電話。 –

+1

@MattKelly実際には、これはあなたとは異なる解決策です。バッククイックは同じシステムではありません。 – simbabque

+0

'qx'演算子を使うこともできます。 'my $ last_line = qx!tail -n 1 $ filename!; ' – dgw

-1

以下が見つかりました。here

サイズのためにこれを試してみてください上:

system tail => -1 => $file; 
+7

実行中のプログラムの 'system' [終了コードを返します](http://perldoc.perl.org/functions/system.html)**出力はありません**。 – simbabque

0

(行は比較的等しい長さであれば、各ラインが高々Xバイト、または何でもある場合)は、ファイルについて何かを知っているなら、あなたはすることができるかもしれませんシークで何かをしなさい。たとえば、最後の行が40バイト以下であれば、以下のことができます。ファイルが100 MBであることがわかっている場合(File :: statを使用しています)、最初の10行を平均して何バイトあるかを知ることができます。ループを実行します。あなたは15行または20行を読まなければならないかもしれませんが、それは悪くありません。

open(my $input,"input2.txt")||die "can't open the file"; 

my $last_line; 
seek ($input, -50, 2); 
while(<$input>) 
{ 
    $last_line = $_; 
} 

print "$last_line\n"; 
+0

字句ファイルハンドルを使用しようとしました。 – mkHun

+0

@mkHunあなたは何を意味するのか分かりません。 $ input _は、字句ファイルハンドルです。 – kchinger

+0

字句ファイルハンドルには引数があります。 '私の$ fhを開く、" <"、"ファイル名 ";'。字句ファイルハンドルの理由は、ファイルを閉じる必要がないためです。 – mkHun

関連する問題