如何对类似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的功能。

阿蒂

您可以使用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行的结束,这不是上面显示的类似列的形式。不幸的是,分类使他们搞砸了。如何排除这些行并仅对有列的行进行排序?

您需要知道要排序的块之前/ in /之后有几行,并且可以用变量替换下面使用的值。如下所示的简单管道可以很好地工作。

内容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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章