大きなファイルの途中から数行だけ出力したい
linux上で100万行ある数ギガのファイルから30万行目から10行だけ表示したい時に
一番効率のいい方法はなんでしょうか?
現在下記のようなコマンドを打っていますが
時間がかかって大変です。
head -300010 | tail -10
コメント(5)
sedは基本的に行単位なので、ホールドしない限りは、前の行を覚えていることはないですが、ただファイル終端まで1行読み込んで捨てる作業をするようですねー。head+tailは表示は遅いですが、sedより終わるのは速い気がします。いくつか試したのですが、Cで素朴にプログラム書いたのが一番速かったですw
perl -e 'open IN,"foo.file";$i=1;while(<IN>){exit if($i==300010);print if($i>=300000);$i++;}'
みたいなのも結構よさげです。同じ書き方でCの方が断然速いですがw意外にRubyはよくなかったのですが、私の書き方が悪いせいかもしれません。
そりゃあCで書けば早いけど実稼動してるサーバに
勝手に自作プログラム入れるのもなあ・・・。
perlはギリギリっぽいけど手間は手間ですね。
ちなみに
同じ書き方というからにはperlコンパイラでコンパイルしました?
Cには勝てないとおもいますが、昔と違って同じ条件ならperlは
現在かなり早い部類の言語です。
ありゃ、役に立ってないのにベストありがとうございます。。。
Cの方は、#3のPerlをコンパイルしたわけではなく、同じようなロジックで書きました。Perlをコンパイルした方が遅いと思います。速さを追求するなら「>=」はダメですよね。。。




