Linux sort: сортировка по столбцу.

Если вы работаете с текстовыми файлами или таблицами в Linux, часто возникает потребность сортировать строки по содержимому конкретного столбца.

В этой статье мы расскажем, как выполнить сортировку по столбцу в Linux, используя команду sort, и объясним основные моменты без лишних деталей.

Что значит «сортировка по столбцу»?

Представьте, что у вас есть таблица или список, в котором данные разделены каким‑либо символом (например, пробелом, запятой или табуляцией).

Каждый такой разделитель отделяет отдельный столбец. Ваша задача — отсортировать строки файла в зависимости от значений в выбранном столбце.

Как это сделать в Linux?

Для сортировки по конкретному столбцу используют команду sort с опцией -k. Самый важный момент — правильно указать номер столбца, по которому нужно выполнить сортировку.

Основные шаги для сортировки по столбцу

Определение разделителя

Надо понять, каким символом разделены столбцы в вашем файле. Обычно это пробел, табуляция или запятая.

У нас есть тестовый файл table.csv следующего содержания:

waky@ubuntu:~$ cat table.csv
John Doe; 1997 March 31
Clark Kent; 1966 December 15
Bruce Wayne; 1982 February 19
Jane Doe; 1999 June 13
waky@ubuntu:~$

Самый очевидный выбор в качестве разделителя — пробел.

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

Использование опции -k с нужным номером столбца

Нумерация столбцов начинается с 1. Если мы хотим отсортировать строки по именам (первый столбец), то выполним следующую команду:

waky@ubuntu:~$ sort -k 1 table.csv
Bruce Wayne; 1982 February 19
Clark Kent; 1966 December 15
Jane Doe; 1999 June 13
John Doe; 1997 March 31
waky@ubuntu:~$

Строки расположены в алфавитном порядке относительно имен.

Если нужно сортировать по фамилии (второй столбец), указываем двойку:

waky@ubuntu:~$ sort -k 2 table.csv
John Doe; 1997 March 31
Jane Doe; 1999 June 13
Clark Kent; 1966 December 15
Bruce Wayne; 1982 February 19
waky@ubuntu:~$

Теперь в алфавитном порядке отсортированы фамилии.

Использование нестандартного разделителя

В нашем примере мы можем использовать ; в качестве альтернативного разделителя. Он разделит каждую строку на два столбца. Для этого используем опцию -t:

waky@ubuntu:~$ sort -t ';' -k 2 table.csv
Clark Kent; 1966 December 15
Bruce Wayne; 1982 February 19
John Doe; 1997 March 31
Jane Doe; 1999 June 13
waky@ubuntu:~$

Результат отсортирован по второму столбцу, который начинается с года. Однако, стоит помнить, что sort воспринимает любую строку как текст, для того, чтобы числа подвергались числовой, а не алфавитной сортировке используйте параметр -n.

Подробнее о команде sort и ее основных опциях читайте в нашей специальной статье.

Заключение

Чтобы отсортировать файл в Linux по конкретному столбцу, достаточно использовать команду sort с опцией -k и указать номер нужного столбца. Это очень удобно, когда управляете большими таблицами или списками, и нужно быстро найти или упорядочить данные по определенному параметру.