Как извлечь интервал / диапазон строк из сжатого файла?

#linux #zcat

#linux #zcat

Вопрос:

Как мне вернуть интервал строк из файла 100mil rows * .gz?

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

является ли это наиболее эффективным вариантом?

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

Комментарии:

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

Ответ №1:

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

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