2016-10-05 5 views
0

Как вернуть интервал строк из 100-миллиметровых строк * .gz-файла?Как извлечь интервал/диапазон строк из сжатого файла?

Предположим, мне нужны 5-миллиметровые ряды, начиная с 15мил до 20 мил?

это лучший вариант?

zcat myfile.gz|head -20000000|tail -500 
real 0m43.106s 
user 0m43.154s 
sys  0m9.259s 
+0

или 'zcat file | awk 'NR> 14999999 && NR <2000001 {if (NR> 20000001) exit}'> outfile' может быть немного быстрее. – shellter

ответ

1

Это вполне разумный вариант; так как вы не знаете, как долго будет линия, вам в основном придется распаковывать и перебирать строки, чтобы выяснить, где находятся разделители строк. Все три инструмента довольно сильно оптимизированы, поэтому время ввода/вывода и времени декомпрессии, вероятно, будет доминировать независимо.

Теоретически, развертывание собственного решения, которое объединяет все три инструмента в одном исполняемом файле, может немного сэкономить (за счет сокращения затрат на IPC), но экономия, вероятно, будет незначительной.