文件名的数字排序

时间:2012-06-12 13:57:55

标签: bash sorting

我有一个包含名称模式为UPDATE[x.y.z]的脚本的文件夹,其中x.y.z是脚本的版本。

我需要的是一个运行按版本排序的脚本的bash脚本,因此字母排序不好。

例如,UPDATE1.11.0应在UPDATE1.2.3之后执行。

我可以使用比较器来指示排序顺序吗?如果没有,还能怎样做呢?

2 个答案:

答案 0 :(得分:1)

如果你有GNU sort或其他支持它的版本,你可以使用版本排序。

sort -V

sort --version-sort

此外,在my answer here中,我发布了一个比较版本的脚本。

答案 1 :(得分:1)

如果您没有GNU排序(即您使用的是OSX或FreeBSD或NetBSD),您可以通过对不同的字段进行排序来伪造它。

[ghoti ~]$ printf "foo1.2.3\nfoo1.11.0\nfoo1.4.1\nfoo1.4.0\n" | sort -nt. -k2,3
foo1.2.3
foo1.4.0
foo1.4.1
foo1.11.0
[ghoti ~]$

这忽略了主要版本号,因为它没有用点分隔。但无论如何它可能对你有用。