Сортировка файла данных на основе отдельного ключевого файла

#sorting #gnu-coreutils #gnu-sort

#сортировка #gnu-coreutils #gnu-сортировка

Вопрос:

  1. У нас есть 2 файла: data.txt и keys.txt .
  2. data.txt это некоторый правильный текст в юникоде со N строками.
  3. keys.txt представляет собой список целых чисел, разделенных новой строкой, N строк.
  4. Выведите файл sorted.txt , в котором строки data.txt отсортированы по keys.txt без записи промежуточного файла paste -d',' keys.txt data.txt .

Мне нужно использовать это для больших файлов (сотни ГБ) на машинах с 16-32 ГБ памяти.

Моей первой попыткой было сделать это на Python, что немного медленно. Это достаточно просто, поэтому мы обсуждали это на C . Но я бы предпочел, чтобы он использовал легкодоступные инструменты, поэтому установка не требуется. Это вполне может быть невозможно эффективно сделать с помощью инструментов GNU или Unix, но я не знаю достаточно, чтобы предъявлять претензии.

Ответ №1:

Вы должны быть в состоянии сделать это без буферизации файла. Для повышения производительности, я думаю, калибровка sort --buffer-size будет первым шагом, и, возможно, использование parallel сортировки по частям вторым.

 paste keys.txt data.txt | sort -n -k1 | cut -f2-
 

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

1. Как sort здесь выполняется сортировка, когда данные еще не все есть, не записывая их? Разбивка по --buffer-size ?