Необходимо отправить желаемый вывод с вопросом. Мое предположение было этим:
$ awk '{ if($2) printf("%s ", $2); else print ""; }' < dataset
Jim Dice AFDSDFDSFDSFASFA 12343314
Bob Trumpets AFD232SFDSFASFA 12343314
Mary Gambling EWDSFDSFASFA 12343314
Обратите внимание, что это - ужасно глупый метод, он не проверяет ничего вообще. Если Ваш вход будет выглядеть несколько отличающимся от того, что Вы отправили его, то вероятно, повредится.
Вы не указываете операционную систему и реализацию сортировки; я предполагаю, что вы имеете в виду сортировку GNU. Вы также не говорите, сколько времени "много времени" и как долго вы ожидаете это занять. Самое главное, вы не упоминаете о возможностях подсистемы ввода/вывода, что будет определяющим фактором.
Обычный диск SATA выдает ~150 Мб/с. При такой скорости чтения ваш 150 ГБ файл займет 1000 секунд, около 15 минут. Попробуйте посмотреть Имя файла cat времени >/dev/null
. Если ~15 минут (или что-то вроде time cat
показывает) в порядке, вы сможете получить сортировку(1) для работы примерно в 3 раза быстрее, потому что вывод тоже должен быть записан.
Лучшим вариантом ускорения будет -параллельное, так как ваши данные помещаются в память и у вас есть свободные процессоры. Согласно инфо-странице, --buffer-size не будет иметь значения, так как
... этот вариант влияет только на начальный размер буфера. Буфер вырастает за пределы SIZE, если `сортировка' встречает входные строки больше SIZE.
, в то время как быстрый поиск указывает на то, что GNU использует сорт слияния , который поддаётся распараллеливанию.
Если вы действительно хотите знать, как GNU сортировка определяет размер буфера и какой алгоритм она использует для параллельной сортировки, то исходный текст coreutils и сопроводительная документация легко доступны.
Но на вашем месте я бы не стал беспокоиться. Что бы вы ни делали с master_matrix_unsorted.csv
, сортировка(1), конечно, не подходит.
Во-первых, CSV-файл однажды сбивает вас с толку, потому что синтаксис CSV намного превосходит ken сортировки. Во-вторых, это самый медленный способ, потому что sort(1) вынуждена сортировать целые строки (неопределенной длины), а не только второй столбец. В-третьих, когда вы закончите, что у вас будет? CSV-файл , отсортированный . Это действительно лучше? Почему порядок так важен?
Сортировка звучит как один из шагов на пути к цели, которая, скорее всего, включает в себя некие вычисления на данных, для вычисления которых потребуются числа в двоичном формате. Если это так, то сначала можно получить CSV-файл в более трассируемом, вычисляемом, двоичном формате чисел , скажем, в СУБД. Может оказаться, что сортировка окажется лишней для конечной цели.
Здесь упоминается способ вычисления размера буфера сортировки #. Это может дать вам некоторое представление. Не уверен, что это решит вашу проблему. Но стоит прочитать. Об этом упоминается, имея в виду mysql db, он также может применяться по тому же сценарию, что и ваш.