Разделение файла на разделитель - PullRequest
5 голосов
/ 01 июня 2011

У меня есть файл в системе Linux, который составляет примерно 10 ГБ.Он содержит 20 000 000 двоичных записей, но каждая запись разделяется разделителем ASCII «$».Я хотел бы использовать команду split или некоторую их комбинацию, чтобы разделить файл на более мелкие части.В идеале я мог бы указать, что команда должна разбивать каждые 1000 записей (следовательно, каждые 1000 разделителей) на отдельные файлы.Кто-нибудь может помочь с этим?

Ответы [ 3 ]

5 голосов
/ 01 июня 2011

Единственной неортодоксальной частью проблемы является разделитель записей. Я уверен, что это легко исправить в awk - но я ненавижу awk.

Я бы сначала перенес это в область «нормальных» проблем:

tr '$' '\n' < large_records.txt | split -l 1000

По умолчанию создаются файлы xaa, xab, xac ...; посмотрите man split, чтобы узнать больше вариантов

2 голосов
/ 01 июня 2011

Я люблю awk:)

BEGIN { RS="$"; chunk=1; count=0; size=1000 }
{
   print $0 > "/tmp/chunk" chunk; 
   if (++count>=size) {
      chunk++;
      count=0;
   }
}

(обратите внимание, что оператор перенаправления в awk только усекает / создает файл при первом вызове - последующие ссылки обрабатываются как операции добавления - в отличие от перенаправления оболочки)

1 голос
/ 06 ноября 2013

Убедитесь, что по умолчанию unix split будет исчерпан суффиксами, как только он достигнет максимального порога предела суффикса по умолчанию, равного 2. Подробнее о: https://www.gnu.org/software/coreutils/manual/html_node/split-invocation.html

...