如何对类似 ls 的文件列表进行排序?

如何对类似 ls 的文件列表进行排序?

如何按最后一列对如下所示的列表进行排序:

drwxr-sr-x   2 user     group           4096 2018-02-19 14:11:42  /something/project/somefile
drwxr-sr-x   2 user     group           4096 2018-02-19 00:14:50  /blah-blah/anything
-rw-r-----   1 someone  users           2188 2018-07-21 13:52:59  /aaa/222
drwxr-S---   2 someone  users           4096 2018-06-25 14:27:42  /bbb/333/anything/whatever
-rw-r-----   1 someone  users            715 2018-06-16 20:09:58  /xxx/aaa/666

*该列表位于文件中但不是生成的,ls所以我无法使用 ls 的功能。

答案1

您可以使用sort

sort -k8,8 <<EOF
drwxr-sr-x   2 user     group           4096 2018-02-19 14:11:42  /something/project/somefile
drwxr-sr-x   2 user     group           4096 2018-02-19 00:14:50  /blah-blah/anything
-rw-r-----   1 someone  users           2188 2018-07-21 13:52:59  /aaa/222
drwxr-S---   2 someone  users           4096 2018-06-25 14:27:42  /bbb/333/anything/whatever
-rw-r-----   1 someone  users            715 2018-06-16 20:09:58  /xxx/aaa/666
EOF

-k选择按哪个字段排序,8,8表示按从字段 8 到字段 8 的数据排序。

您可以使用它-t来定义字段分隔符,但这里的默认值就可以了(非空白到空白的转换)。

输出:

-rw-r-----   1 someone  users           2188 2018-07-21 13:52:59  /aaa/222
drwxr-S---   2 someone  users           4096 2018-06-25 14:27:42  /bbb/333/anything/whatever
drwxr-sr-x   2 user     group           4096 2018-02-19 00:14:50  /blah-blah/anything
drwxr-sr-x   2 user     group           4096 2018-02-19 14:11:42  /something/project/somefile
-rw-r-----   1 someone  users            715 2018-06-16 20:09:58  /xxx/aaa/666

接下来,你问道:

我的文件包含列表,其中有 N 个起始行和 M 个结束行,它们不是上面显示的列形式。不幸的是,排序把它们弄乱了。我怎样才能排除这些行,只对列形式进行排序?

你需要知道有多少行//要排序的块,您可以用变量替换下面使用的值。如下所示的简单管道可以很好地工作。

内容data.txt

Zline1
Zline2
drwxr-sr-x   2 user     group           4096 2018-02-19 14:11:42  /something/project/somefile
drwxr-sr-x   2 user     group           4096 2018-02-19 00:14:50  /blah-blah/anything
-rw-r-----   1 someone  users           2188 2018-07-21 13:52:59  /aaa/222
drwxr-S---   2 someone  users           4096 2018-06-25 14:27:42  /bbb/333/anything/whatever
-rw-r-----   1 someone  users            715 2018-06-16 20:09:58  /xxx/aaa/666
AlineN-1
AlineN

管道:

(head -n 2; head -n 5 | sort -k8,8; cat) < data.txt

输出:

Zline1
Zline2
-rw-r-----   1 someone  users           2188 2018-07-21 13:52:59  /aaa/222
drwxr-S---   2 someone  users           4096 2018-06-25 14:27:42  /bbb/333/anything/whatever
drwxr-sr-x   2 user     group           4096 2018-02-19 00:14:50  /blah-blah/anything
drwxr-sr-x   2 user     group           4096 2018-02-19 14:11:42  /something/project/somefile
-rw-r-----   1 someone  users            715 2018-06-16 20:09:58  /xxx/aaa/666
AlineN-1
AlineN

相关内容