我有一个巨大的文本文件,其中包含以下行:
-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
Run Code Online (Sandbox Code Playgroud)
我想要的是根据第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
Run Code Online (Sandbox Code Playgroud)
为此,我使用:
for i in file.txt ; do sort -k5n $i ; done
我想知道这是否是最快或更有效的方式
谢谢
为何使用for
?为什么不呢:
sort -k5n file.txt
Run Code Online (Sandbox Code Playgroud)
哪种更有效取决于许多问题.毫无疑问,您可以对特定数据集(大小和其他属性)进行更快的排序 - 冒泡排序实际上可以胜过其他排序(使用特定输入).
但是,您是否测试过标准排序并确定它太慢了?这是你应该做的第一件事.我的机器(这绝不是地球上最笨的机器)可以在十秒内完成400万行:
real 0m9.023s
user 0m8.689s
sys 0m0.332s
Run Code Online (Sandbox Code Playgroud)
话虽如此,至少有一个技巧可以加速它.在对文件应用排序之前,将文件转换为具有固定长度字段的固定长度记录.对特定字符集和固定长度记录进行排序通常比允许变量字段和记录大小允许的更灵活排序快得多sort
.
这样,您添加一个O(n)
操作(转换)以加速最好的O(n log n)
操作(排序).
但是,与所有优化一样,衡量,不要猜!
归档时间: |
|
查看次数: |
1269 次 |
最近记录: |