Có cách nào nhanh và hiệu quả để đọc các dòng tệp lớn cụ thể mà không tải nó vào bộ nhớ không?Đọc một dòng cụ thể từ tệp lớn trong Perl
Tôi đã viết một kịch bản perl, chạy nhiều dĩa và tôi muốn họ đọc các dòng cụ thể từ một tệp.
Tại thời điểm Im sử dụng một lệnh bên ngoài:
sub getFileLine {
my ($filePath, $lineWanted) = @_;
$SIG{PIPE} = '_IGNORE_';
open(my $fh, '-|:utf8', "tail -q -n +$lineWanted \"$filePath\" | head -n 1");
my $line = <$fh>;
close $fh;
chomp($line);
return $line;
}
nhanh của nó và nó hoạt động - nhưng có lẽ đó là một "Perl-ish" cách hơn, nhanh và bộ nhớ hiệu quả như thế này? Như bạn đã biết, việc tạo một quy trình rẽ nhánh trong Perl sẽ sao chép bộ nhớ chính - vì vậy nếu quá trình chính đang sử dụng 10MB, ngã ba sẽ sử dụng ít nhất là nhiều.
Mục tiêu của tôi là giữ quy trình ngã ba (vì vậy quá trình chính cho đến khi chạy dĩa cũng) sử dụng bộ nhớ càng thấp càng tốt. Đó là lý do tại sao tôi không muốn tải toàn bộ tập tin vào bộ nhớ.
btw, đó là 'IGNORE', không phải' _IGNORE_'. – ikegami