sed -n '10000000,10000020p' filename
Вы могли бы ускорить это немного так:
sed -n '10000000,10000020p; 10000021q' filename
В этих командах опция -n
вызывает sed
«подавление автоматической печати пространства шаблона». Команда p
«print [s] текущее пространство шаблона» и q
команда «Немедленно завершить работу [s] сценария sed без обработки ввода ...» Цитаты взяты со sed
man
страницы .
Кстати, ваша команда
tail -n 10000000 filename | head 10
начинается с десятимиллионной строки от конца файла, в то время как ваша «средняя» команда должна начинаться с десятимиллионной строки с начала, что будет эквивалентно:
head -n 10000010 filename | tail 10
Проблема в том, что для несортированных файлов со строками переменной длины любой процесс должен будет проходить через файл, считая новые строки. Там нет никакого способа, чтобы сократить это.
Однако, если файл отсортирован (например, файл журнала с метками времени) или имеет строки фиксированной длины, то вы можете искать в файле, основываясь на позиции байта. В этом примере файл журнала, вы могли бы сделать бинарный поиск в диапазоне времени , как мой сценарий Python здесь * делает. В случае файла с фиксированной длиной записи это действительно просто. Вы просто ищете linelength * linecount
символы в файле.
* У меня есть намерение опубликовать еще одно обновление этого скрипта. Может быть, я доберусь до этого на днях.