Как отсортировать по последнему столбцу список, который выглядит следующим образом:

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 ответ1

2

Вы можете использовать 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .