最快的文件排序方式

时间:2010-03-16 13:17:14

标签: bash sorting

我有一个巨大的文本文件,其中包含以下行:

-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 个答案:

答案 0 :(得分:6)

为什么要使用for?为什么不呢:

sort -k5n file.txt

哪种更有效取决于许多问题。毫无疑问,您可以对特定数据集(大小和其他属性)进行更快的排序 - 冒泡排序实际上可以胜过其他排序(使用特定输入)。

但是,您是否测试了标准排序并确定它太慢了?这是你应该做的第一件事。我的机器(这绝不是地球上最笨的机器)可以在十秒内完成400万行:

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

话虽如此,至少有一个可以加速它的技巧。在对文件应用排序之前,将文件转换为具有固定长度字段的固定长度记录。对特定字符集和固定长度记录进行排序通常比sort允许的变量字段和记录大小允许的更灵活排序快得多。

这样,你可以添加一个O(n)操作(转换)来加速最好的O(n log n)操作(排序)。

但是,与所有优化一样,衡量,不要猜测!

答案 1 :(得分:1)

如果您要排序许多不同的文件,可以使用循环,但是,因为您只有1个文件,只需将文件名传递给排序

$ sort -k5n file