2

有没有办法使用 GNU Coreutils 对存储在二进制文件中的 64 位数字进行排序?如果文件不是二进制文件,那么sort -n就是解决方案,但我没有找到任何将它与二进制数据一起使用的选项。

文件非常大(~100GB),如果可能的话,我不想制作它的文本(非二进制)副本。

数据样本:

$ xxd file 00292e0: 4036 1eb7 6888 d319 de6b 7402 9ca9 f116 @6..h....kt..... 00292f0: db68 7f05 199f 9d36 cf01 cb28 e49f 1116 .h.....6...(.... 0029300: 0c7c 8b55 2963 ef0c 277a f2b0 38d7 2b19 .|.U)c..'z..8.+. 0029310: c83b 2614 4327 d838 820c 1bb8 444f 1731 .;&.C'.8....DO.1 0029320: 1695 cab3 cd12 092a 0691 d7e4 5fcc b01d .......*...._... 0029330: b12b 7c1b a209 7c1c 568a 125c 541c d334 .+|...|.V..\T..4 0029340: 09a3 ecbc 8370 e205 9265 7759 a378 4e2f .....p...ewY.xN/

4

2 回答 2

4

bsort实用程序执行此操作。

这是一种用 C 语言编写的闪电般快速的就地基数排序。其开发的一个测试用例是在具有 16Gb 内存的机器上的一个 100Gb 文件 - 排序大约需要 22 秒。

于 2016-07-25T04:15:41.760 回答
0

sort(1)在这里不会帮助你。对于一个小文件,可以将您的文件分成几行并将其提供给sort(1),但对于 100G 文件当然不行。

Serverfault 上这个问题的答案有一个工具链接,该工具是为准确解决您的任务而编写的。您可以在那里查看 github 项目(它似乎是用 Go 编写的,因此如果您决定使用它,则需要安装编译器)。

快速谷歌搜索没有找到任何其他流行的工具来完成这个任务,用一些更流行的语言编写(这让我有点惊讶,因为任务本身只是一种合并类型,每年有成千上万的学生在他们的 CS 课程中实施,但这是一个关闭-话题)。

于 2014-09-26T17:20:11.587 回答