Самый быстрый способ сортировки файлов - PullRequest
1 голос
/ 16 марта 2010

У меня огромный текстовый файл со строками вроде:

-568.563626  159   33  -1109.660591  -1231.295129  4.381508
-541.181308  159   28  -1019.279615  -1059.115975  4.632301
-535.370812  155   29  -1033.071786  -1152.907805  4.420473
-533.547101  157   28  -1046.218277  -1063.389677  4.423696

Я хочу отсортировать файл в зависимости от 5-го столбца, чтобы я получил

-568.563626  159   33  -1109.660591  -1231.295129  4.381508
-535.370812  155   29  -1033.071786  -1152.907805  4.420473
-533.547101  157   28  -1046.218277  -1063.389677  4.423696
-541.181308  159   28  -1019.279615  -1059.115975  4.632301

Для этого я использую:

for i in file.txt ; do sort -k5n $i ; done

Интересно, это самый быстрый или более эффективный способ

Спасибо

Ответы [ 2 ]

6 голосов
/ 16 марта 2010

Зачем использовать for? Почему бы просто:

sort -k5n file.txt

А какой тип более эффективен, зависит от ряда вопросов. Без сомнения, вы можете сделать более быструю сортировку для определенных наборов данных (размер и другие свойства) - пузырьковая сортировка может на самом деле превосходить другие сортировки (с конкретными входными данными).

Однако, вы проверили стандартную сортировку и установили, что она слишком медленная? Это первое, что вы должны сделать. Моя машина (которая ни в коем случае не самая грубая на планете) может выполнить 4 миллиона из этих строк менее чем за десять секунд:

real     0m9.023s
user     0m8.689s
sys      0m0.332s

Сказав это, есть по крайней мере один трюк, который может ускорить его. Перед применением сортировки преобразуйте файл в записи фиксированной длины с полями фиксированной длины. Сортировка по определенному набору символов и записей фиксированной длины часто может быть намного быстрее, чем более гибкая сортировка, допускаемая переменным полем и размерами записей, допускаемыми sort.

Таким образом, вы добавляете операцию O(n) (преобразование), чтобы ускорить то, что, вероятно, в лучшем случае является операцией O(n log n) (сортировка).

Но, как и во всех оптимизациях, измерьте, не угадайте!

1 голос
/ 16 марта 2010

если у вас много разных файлов для сортировки, вы можете использовать цикл, однако, поскольку у вас есть только 1 файл, просто передайте имя файла для сортировки

$ sort -k5n file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...