Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 对文件进行排序的最快方法_Bash_Sorting - Fatal编程技术网

Bash 对文件进行排序的最快方法

Bash 对文件进行排序的最快方法,bash,sorting,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

我有一个巨大的文本文件,上面有这样的行:

-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
为此,我使用:

file.txt中i的
;do sort-k5n$i;完成

我不知道这是最快还是更有效的方法


谢谢

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

sort -k5n file.txt
什么样的方式更有效取决于许多问题。毫无疑问,您可以对特定的数据集(大小和其他属性)进行更快的排序—冒泡排序实际上可以优于其他排序(使用特定的输入)

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

real     0m9.023s
user     0m8.689s
sys      0m0.332s
话虽如此,至少有一个技巧可以加快速度。将文件转换为具有固定长度字段的固定长度记录,然后再对其应用排序。对特定字符集和固定长度记录进行排序通常比
排序所允许的可变字段和记录大小更灵活的排序快得多

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


但是,就像所有的优化一样,测量,不要猜测

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

sort -k5n file.txt
什么样的方式更有效取决于许多问题。毫无疑问,您可以对特定的数据集(大小和其他属性)进行更快的排序—冒泡排序实际上可以优于其他排序(使用特定的输入)

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

real     0m9.023s
user     0m8.689s
sys      0m0.332s
话虽如此,至少有一个技巧可以加快速度。将文件转换为具有固定长度字段的固定长度记录,然后再对其应用排序。对特定字符集和固定长度记录进行排序通常比
排序所允许的可变字段和记录大小更灵活的排序快得多

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


但是,就像所有的优化一样,测量,不要猜测

如果有许多不同的文件要排序,可以使用循环,但是,由于只有一个文件,只需传递文件名进行排序即可

$ sort -k5n file

如果有许多不同的文件要排序,可以使用循环,但是,由于只有一个文件,只需传递文件名进行排序

$ sort -k5n file