给定一个ls -l
目录列表,这些目录是软件发布版本,如何分类为人类喜欢的形式?例如:
$ ls -loghF 共计 209 drwxr-xr-x 2 18 年 6 月 3 日 11:33 12.0.40.0/ drwxr-xr-x 2 8 月 24 日 14:45 13.0.11.10/ drwxr-xr-x 2 13 年 7 月 3 日 14:12 13.0.11.4/ drwxr-xr-x 2 7 月 26 日 15:30 13.0.11.5/ drwxr-xr-x 2 7 月 27 日 11:33 13.0.11.6/ drwxr-xr-x 2 月 3 日 8 月 3 日 11:41 13.0.11.7/ drwxr-xr-x 2 10 年 8 月 3 日 11:53 13.0.11.8/ drwxr-xr-x 2 17 年 8 月 3 日 17:00 13.0.11.9/ drwxr-xr-x 2 8 月 3 日 14:37 13.0.17.0/ drwxr-xr-x 2 13 年 8 月 3 日 11:50 13.0.18.0/ drwxr-xr-x 2 17 年 8 月 3 日 11:21 13.0.19.0/ drwxr-xr-x 2 7 月 28 日 15:00 13.0.9.1/
期望的结果是:
$ ls -loghF | 种类 ... 共计 209 drwxr-xr-x 2 18 年 6 月 3 日 11:33 12.0.40.0/ drwxr-xr-x 2 7 月 28 日 15:00 13.0.9.1/ drwxr-xr-x 2 13 年 7 月 3 日 14:12 13.0.11.4/ drwxr-xr-x 2 7 月 26 日 15:30 13.0.11.5/ drwxr-xr-x 2 7 月 27 日 11:33 13.0.11.6/ drwxr-xr-x 2 月 3 日 8 月 3 日 11:41 13.0.11.7/ drwxr-xr-x 2 10 年 8 月 3 日 11:53 13.0.11.8/ drwxr-xr-x 2 17 年 8 月 3 日 17:00 13.0.11.9/ drwxr-xr-x 2 8 月 24 日 14:45 13.0.11.10/ drwxr-xr-x 2 8 月 3 日 14:37 13.0.17.0/ drwxr-xr-x 2 13 年 8 月 3 日 11:50 13.0.18.0/ drwxr-xr-x 2 17 年 8 月 3 日 11:21 13.0.19.0/
排序必须跳过每行的日期部分,然后使用“.”按数字排序(例如,从 12 或 13 开始)作为字段分隔符。
我想到了两种方法,但是如果完全支持 sort -k 语法,我会遇到困难:
(1) 跳过前 36 个字符,然后使用 '.' 作为字段分隔符,对接下来的 4 个字段进行数字排序。
(2) 以字段分隔符为空格,跳到第7个字段,然后将字段分隔符更改为'.' 并对接下来的 4 个字段进行数字排序。
替代方案是一个小的 Perl 脚本,但 Unix 排序不能完成这个“简单”任务吗?