#sorting #gnu-coreutils #gnu-sort
#сортировка #gnu-coreutils #gnu-сортировка
Вопрос:
- У нас есть 2 файла:
data.txt
иkeys.txt
. data.txt
это некоторый правильный текст в юникоде соN
строками.keys.txt
представляет собой список целых чисел, разделенных новой строкой,N
строк.- Выведите файл
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
?