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