我正在尝试使用 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
小于 100
和 102
),第二个是 @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/