Сортировка по последнему полю строки - PullRequest
34 голосов
/ 11 июля 2010

Какой самый простой способ сортировки списка строк, сортировка по последнему полю каждой строки?Каждая строка может иметь переменное количество полей.

Что-то вроде

sort -k -1

- это то, что я хочу, но sort (1) не принимает отрицательные числа для выбора полей с конца вместоначало.

Я также хотел бы иметь возможность выбрать разделитель полей.

Редактировать: Чтобы добавить некоторую специфичность к вопросу: список, который я хочу отсортировать, представляет собой списокмаршруты.Имена путей могут быть произвольной глубины, поэтому переменное количество полей.Я хочу отсортировать компонент имени файла.

Эта дополнительная информация может изменить способ манипулирования строкой для извлечения последнего поля (можно использовать basename (1)), но не меняет требований к сортировке.

например,

/a/b/c/10-foo
/a/b/c/20-bar
/a/b/c/50-baz
/a/d/30-bob
/a/e/f/g/h/01-do-this-first
/a/e/f/g/h/99-local

Я хочу, чтобы этот список был отсортирован по именам файлов, которые начинаются с цифр, указывающих порядок чтения файлов.

Я добавил свой ответ, ниже которогокак я сейчас это делаю.Я надеялся, что есть более простой способ - возможно, другая утилита сортировки - возможно, без необходимости манипулировать данными.

Ответы [ 11 ]

0 голосов
/ 11 июля 2010

sort позволяет указать разделитель с параметром -t, если я его хорошо помню.Чтобы вычислить последнее поле, вы можете сделать что-то вроде подсчета количества разделителей в строке и суммирования одного.Например, что-то вроде этого (при условии разделителя ":"):

d=`head -1 FILE | tr -cd :  | wc -c`
d=`expr $d + 1`

($d теперь содержит последний индекс поля).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...