LINUX.ORG.RU

my $lines = `tail -n 10 /dev/urandom`;

:)

anonymous
()

#!/usr/bin/perl -w

use IO::Seekable;

open FILE, $ARGV[0];

$nlc = 0;

seek FILE, -1, SEEK_END;

# ишшем 10 последних строк :-) while(read FILE, $c, 1) { $nlc++ if ($c eq "\n"); last if ($nlc > 10); seek FILE, -2, SEEK_CUR; }

print <FILE>;

close FILE;

myhand
()

use Tie::File;
tie @line, 'Tie::File', $filename;
@last_10 = @line [-10 .. -1];

anonymous
()

Боюсь все эти варианты реально "листают" весь файл :)

Могу предложить простенький алгоритм:
1. Читаешь Х байт с конца. Это не требует "листания" всего файла.
2. Если в этих прочитанных данных есть 11 строк, то берешь последние 10 из них.
3. Иначе Читаешь предыдущие Y байт и склеиваешь их с предыдущими прочитаными. Далее опять шаг 2.

roller ★★★
()
Ответ на: комментарий от roller

>Боюсь все эти варианты реально "листают" весь файл :)

... хотя вариант с tail должен работать правильно :)

roller ★★★
()
Ответ на: комментарий от myhand

>Tie::File тоже AFAIK не сканирует весь файл ;)

попытка прочитать $a[-1] заняла 20 сек на 700 метровой авишке, винт активно жужал :)

roller ★★★
()
Ответ на: комментарий от vilfred

По теории вероятности - должно быть. В смысле символы переносов.

Да и на практике, слово .уй например попробуй поискать в авишках :)

roller ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.