我有一个列表,例如:
foo.bar.1
foo.bar.2
foo.bar.3.x.y.z
foo.bar.10
foo.bar.0
baz.10.qux
baz.3.qux
需要排序。我需要将其视为一个点分开 字段,其中数字字段需要以数字方式排序。
所以我写道:
#!/usr/bin/env python
import sys
seq = map(lambda l: map(lambda s: (s.isdigit() and [int(s)] or [s])[0], l),
[ s.rstrip().split('.') for s in sys.stdin.readlines() ])
seq.sort()
sys.stdout.write( '\n'.join(['.'.join([str(i) for i in l]) for l in seq]) )
$ mixsort.py < input.txt
baz.3.qux
baz.10.qux
foo.bar.0
foo.bar.1
foo.bar.2
foo.bar.3.x.y.z
foo.bar.10
但我在这里重新发明轮子了吗?有共同点吗?
* nix实用程序,我需要做什么?有没有切换到sort(1)
会帮助我。 (注意数字字段的位置是
未知)。是否有更好的方法来做同样的事情?
答案 0 :(得分:1)
使用版本排序:sort -V
:
输入:
frayser@gentoo ~ $ cat /tmp/list.ran
foo.bar.1
foo.bar.2
baz.10.qux
baz.3.qux
foo.bar.0
foo.bar.3.x.y.z
foo.bar.10
类别:
frayser@gentoo ~ $ LC_ALL=C sort -V /tmp/list.ran
baz.3.qux
baz.10.qux
foo.bar.0
foo.bar.1
foo.bar.2
foo.bar.3.x.y.z
foo.bar.10
我在联系人页面info coreutils "sort invocation"