如何按最后一列对如下所示的列表进行排序:
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