2010-03-16 44 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