Сортировать по третьему столбцу, оставив первый и второй столбец без изменений в Linux?

Мне нужно отсортировать плоский файл третьим столбцом, оставив первый столбец неповрежденным [Первый столбец уже отсортирован] (в Linux). (второй столбец может меняться)

Пример файла i/p: -

b:di:wave
b:di12:red
b:di12:wave
b:di06:pir

Должно выглядеть: -

b:di06:pir
b:di12:red
b:di12:wave
bast:di:wave

Я попробовал несколько вариантов сортировки, но мог сортировать только по второй колонке, но не третьей.

Кто-нибудь может помочь?

Ответы

Ответ 1

Попробуйте следующее:

sort  -t: -k1,1 -k3 data.txt

дает:

bast:disp-san-d5-06:piranha 
bast:display-san-12:redbird
bast:display-san-07:waverider
bast:display-san-12:waverider

Это будет сортировать первое поле в качестве первичного ключа, а третье поле - в качестве вторичного ключа, разделяющего линию на поля на :

Подробнее

data.txt содержит 4 строки из вашего сообщения.

Вы можете указать несколько полей в качестве сортировочных ключей, см. справочная страница

-k1,1 означает сортировку по первому полю (начало в поле 1 и завершение в поле 1, в противном случае он будет продолжать использовать остальную часть строки для определения сортировки)

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

-t: означает разделение полей в строках с символом :, в противном случае по умолчанию используется

Подробнее см. этот вопрос SO Сортировка нескольких ключей с сортировкой Unix и сортировать man-страницу