【发布时间】:2012-01-13 18:55:22
【问题描述】:
我正在尝试使用 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 的文件,因此包含数百万行。
谢谢!
【问题讨论】:
-
仅供参考,这通常称为“自然排序”。
-
不确定性能,但这里是python中自然排序的实现:stackoverflow.com/q/4836710/331473
-
您将如何处理
@42EBKAAXX09082*7*:6:100:1699:328/2和@42EBKAAXX09082*8*:6:100:1699:328/2(强调*s)?它们的排序相同吗? (即只有第三个字段是相关的)然后@JonathanM 的答案是最好的。否则看看我的
标签: python bash shell unix sorting