2个不稳定版本

0.2.0 2023年5月11日
0.1.1 2022年12月31日

#1050 in 文本处理

每月43次下载
用于 hns

Apache-2.0

19KB
300

hnsHuman Numeric Sort v0.2.0 (⏫︎2023-05-11)

  • © 2022–2023 Fredrick R. Brennan 和 hns 作者
    • Apache 2.0许可证,见LICENSE。
  • man 页面

软件包

或者如果您有Rust工具链,可以通过Rust的包管理器 cargo 安装

  • cargo安装 hns

商业

这种情况有没有发生过您?

$ seq 1 30 | awk '{printf "data_%s.txt\n", $1}' | sort -h > important_filenames.txt
$ sort -h < important_filenames.txt
data_10.txt
data_11.txt
data_12.txt
data_13.txt
data_14.txt
data_15.txt
data_16.txt
data_17.txt
data_18.txt
data_19.txt
data_1.txt
data_20.txt
data_21.txt
data_22.txt
data_23.txt
data_24.txt
data_25.txt
data_26.txt
data_27.txt
data_28.txt
data_29.txt
data_2.txt
data_30.txt
data_3.txt
data_4.txt
data_5.txt
data_6.txt
data_7.txt
data_8.txt
data_9.txt

哦,不!您忘了GNU coreutils sort 包的 -h 标志实际上并不做它声称的事情,并且由于各种历史原因无法修复(现在跟紧我,别睡着)!

       -h, --human-numeric-sort
              compare human readable numbers (e.g., 2K 1G)

如果只有更好的方法!

嗨,FREDDY MAYS在这里,带来了另一个FUR-tastic发明。所有的数字,只为您排序!

$ mv important_filenames.txt tests/data/README_example.txt
$ hns < tests/data/README_example.shuf.txt
data_1.txt
data_2.txt
data_3.txt
data_4.txt
data_5.txt
data_6.txt
data_7.txt
data_8.txt
data_9.txt
data_10.txt
data_11.txt
data_12.txt
data_13.txt
data_14.txt
data_15.txt
data_16.txt
data_17.txt
data_18.txt
data_19.txt
data_20.txt
data_21.txt
data_22.txt
data_23.txt
data_24.txt
data_25.txt
data_26.txt
data_27.txt
data_28.txt
data_29.txt
data_30.txt

哇!

但是,如果您在下个Unix时代使用 git pull,您还会得到我的超级无敌负数理解版本!

$ seq -10 10 | awk '{printf "data_%s.txt\n", $1}' | sort -h > tests/data/README_example2.shuf.txt

在您的数字之前是悲伤而单调的...

data_0.txt
data_-10.txt
data_10.txt
data_-1.txt
data_1.txt
data_-2.txt
data_2.txt
data_-3.txt
data_3.txt
data_-4.txt
data_4.txt
data_-5.txt
data_5.txt
data_-6.txt
data_6.txt
data_-7.txt
data_7.txt
data_-8.txt
data_8.txt
data_-9.txt
data_9.txt

但现在它们可以变得极其有序!(哇!)

$ hns < tests/data/README_example2.shuf.txt
data_-10.txt
data_-9.txt
data_-8.txt
data_-7.txt
data_-6.txt
data_-5.txt
data_-4.txt
data_-3.txt
data_-2.txt
data_-1.txt
data_0.txt
data_1.txt
data_2.txt
data_3.txt
data_4.txt
data_5.txt
data_6.txt
data_7.txt
data_8.txt
data_9.txt
data_10.txt

使用起来非常简单!没有命令行选项!只有标准输入和标准输出,一劳永逸!(真的,弗雷迪?)(是的!)

它不仅适用于短文件,哦不不不!它是用Rust编写的,所以您知道它可以处理甚至最大的数据溢出,例如整个随机排序的A类网络!

$ time RUST_LOG=INFO target/release/hns < /tmp/0.0.0.0/8.shuf.txt > /dev/null
[2022-09-20T14:58:00Z INFO  hns] Reading done; got 16777216 lines in 348513µs
[2022-09-20T14:58:28Z INFO  hns] Sorting done; sorted 16777216 lines in 27122184µs
[2022-09-20T14:58:32Z INFO  hns] Writing done; wrote in 4370570µs
real    0m31.855s
user    0m30.306s
sys     0m1.548s

每行有四个比较点的1600万行排序在不到30秒内完成!这是弗雷迪·梅斯的保证。

基准测试数据

  • 请参阅 humnumsort-test-data 仓库

    您可能希望将其克隆为

    $ git clone https://github.com/ctrlcctrlv/humnumsort-test-data/ tests/data/expensive
    

待办事项

  • 通过另一个二进制数进行零填充?

许可证

本软件遵循Apache许可证2.0版本(以下简称“许可证”);除非您遵守许可证,否则不得使用此文件。您可以在以下地址获取许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”分发,不提供任何形式的保证或条件,无论是明示的还是默示的。请参阅许可证了解管理许可证下权限和限制的特定语言。

依赖项

~8–21MB
~272K SLoC