Если вы работаете с текстовыми файлами или таблицами в Linux, часто возникает потребность сортировать строки по содержимому конкретного столбца.
В этой статье мы расскажем, как выполнить сортировку по столбцу в Linux, используя команду sort, и объясним основные моменты без лишних деталей.
Что значит «сортировка по столбцу»?
Представьте, что у вас есть таблица или список, в котором данные разделены каким‑либо символом (например, пробелом, запятой или табуляцией).
Каждый такой разделитель отделяет отдельный столбец. Ваша задача — отсортировать строки файла в зависимости от значений в выбранном столбце.
Как это сделать в Linux?
Для сортировки по конкретному столбцу используют команду sort с опцией -k. Самый важный момент — правильно указать номер столбца, по которому нужно выполнить сортировку.
Основные шаги для сортировки по столбцу
- Определение разделителя
- Использование опции -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 и указать номер нужного столбца. Это очень удобно, когда управляете большими таблицами или списками, и нужно быстро найти или упорядочить данные по определенному параметру.