python - 如何使用排序在 Unix 中按字母数字顺序排序?比看起来更复杂

标签 python bash shell unix sorting

我正在尝试使用 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/

相关文章:

python - 包含来自 PyPi 的 pip 安装库的示例和文档

bash - 在 bash 脚本中重定向输出时如何避免特殊字符

linux - 如何立即更改文件和文件夹的所有权

bash - 我是否需要生成第二个文件来对文件进行排序?

Bash 脚本 - 如何仅调整最近未修改的图像大小?

python - DiD 或 UNIX 套接字的安全替代方案?

python - for循环根据变量名导出数据

python - 使用数组提高Python代码的效率

bash - 为什么我的 Curl 命令大部分时间都无法下载文件,但有时却可以?

c - bash、sh、ps 在 Linux 中如何工作?