我正在尝试使用 unix sort 命令以“直观”/自然的方式按字母数字顺序对一串字母和数字进行排序,但无法正确排序。我有这个文件:

$ cat ~/headers
@42EBKAAXX090828:6:100:1699:328/2
@42EBKAAXX090828:6:10:1077:1883/2
@42EBKAAXX090828:6:102:785:808/2

我想按字母数字排序,直观上 @42EBKAAXX090828:6:10:... 是第一个(因为 10 小于 100102 ),第二个是 @42EBKAAXX090828:6:100... ,第三个是 @42EBKAAXX090828:6:102:204:1871/2

我知道建议对行内的特定位置进行排序,但是 : 此处的位置可能会有所不同,因此这在这里不是通用且可行的解决方案。

我试过了:
sort --stable -k1,1 ~/headers > foo
-n-u 参数的各种组合,但它没有给出正确的排序。

如何通过使用sort的bash或Python有效地完成此任务?我想将此应用于大小为 4-5 GB 左右的文件,因此包含数百万行。

谢谢!

最佳答案

-V 选项似乎可以做你想做的 - 自然排序。显然用于版本号(因此选择了字母)

sort -V ~/headers

产出
@42EBKAAXX090828:6:10:1077:1883/2
@42EBKAAXX090828:6:100:1699:328/2
@42EBKAAXX090828:6:102:785:808/2

关于python - 如何使用排序在Unix中按字母数字排序?比看起来更复杂,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8395395/

10-11 04:02
查看更多