2017-02-23 68 views
0

У меня есть очень большой текстовый файл данных: несколько миллиардов строк, которые в основном в форме:Хорошая стратегия для сжатия линии ориентированных входа на стандартный ввод

On tick 112 total blocks 120 

Простой скрипт Perl превращает это в значений, разделенных запятыми то есть, в данном случае:

112,120 

я хотел бы сжать вывод Perl на лету, но очевидные подходы например

perl myscript.pl myinputfile.txt | bzip2 > compressedoutput.bz2 

вообще не сжимают выход (предположительно потому, что это невозможно сделать по одной линии за раз?)

Есть ли способ обойти это? Очевидно, я могу сгенерировать выходной файл, а затем сжать его, но мне интересно, есть ли один способ командной строки для получения хороших результатов?

+0

много вопросов здесь на S.O. иметь дело с 'unbuffer' и perl-решениями по той же проблеме, поэтому немного оглядитесь на эти термины. Я также хотел бы подтвердить, что сжатие отдельного файла уменьшает размер. Учитывая характер ваших данных, это может быть трудно сделать. Удачи. – shellter

ответ

0

Не имеет значения, как записи выполняются с трубой. Байты сжимаются одинаково на другом конце трубы независимо от того, что.

Если вы правильно описали свои данные, состоящие только из десятичных цифр, запятых и новых строк, то это обязательно должно сжиматься более чем в два раза.

Что именно вы видите?

Кстати, вы можете и должны далее кодировать десятичные целые числа в двоичные целые числа.

+0

Я хочу использовать вывод с R на другой машине, поэтому использование двоичных цифр не является хорошим вариантом. Выход такой же, как и вход - без сжатия вообще – adrianmcmenamin

+0

Вы можете преобразовать его обратно на другой конец. Преобразование в двоичный файл - это еще одна форма сжатия. Выходом компрессора являются произвольные двоичные байты. –

 Смежные вопросы

  • Нет связанных вопросов^_^