2010-03-16 43 views
1

我有一个线一个巨大的文本文件,有点像:最快的方式将文件

-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;做排序-k5n $ i;做

我不知道这是最快的或更有效的方式

感谢

回答

6

为什么使用for?为什么不只是:

sort -k5n file.txt 

什么样的效率更高取决于一些问题。毫无疑问,您可以对特定数据集(大小和其他属性)进行更快的排序 - 泡泡排序实际上可以胜过其他排序(使用特定输入)。

但是,您是否测试了标准排序并确定它太慢?这是你应该做的第一件事。我的机器(这绝不是这个星球上gruntiest)可以做400万的线在十秒钟之:

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

说了这么多,至少有一招其可能加快速度。在对其应用排序之前,将文件转换为固定长度字段的固定长度记录。对特定字符集和固定长度记录进行排序通常比由sort允许的可变字段和记录大小允许的更灵活的排序快得多。

通过这种方式,您可以添加一个O(n)操作(转换)以加速最多可能的操作(排序)。

但是,正如所有的优化,措施,不要猜测!

1

如果你有很多不同的文件进行排序,你可以使用一个循环,但是,因为你只有1个文件,只是通过文件名排序

$ sort -k5n file