Команда sort в Linux: простое руководство для начинающих.

Если вы работаете в системе Linux, то, скорее всего, сталкивались с задачами упорядочивания данных. Например, сортировка списка файлов, строк в файле или результатов команды. Для этого существует команда sort.

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

Что такое команда sort?

Команда sort — это встроенная в Linux команда, которая позволяет сортировать текстовые файлы или вывод других команд по определенным правилам. Она помогает упорядочить строки в алфавитном, числовом или другом порядке.

Почему команда sort так важна?

Она незаменима при работе с большими объемами данных, при обработке логов, списков или баз данных. С помощью sort можно быстро привести данные к нужному виду, что облегчает их анализ и дальнейшую работу.

Основные возможности команды sort

Вот главные функции, которые выполняет команда sort:

  • Альфавитная сортировка — строки сортируются по алфавиту.
  • Числовая сортировка — строки с числами упорядочиваются по их величине.
  • Обратная сортировка — сортировка в обратном порядке.
  • Уникальные строки — удаление повторяющихся строк.
  • Сортировка по ключу — сортировка по определенному полю или повторяющемуся шаблону внутри строки.

Примеры использования команды sort

1. Простая сортировка

Создадим простой файл fruits.txt, в котором в разнобой перечислим названия фруктов:

[root@waky practice]# echo -e "carambola\napple\ndurian\neggfruit\napple\nbanana" > fruits.txt
[root@waky practice]# cat fruits.txt
carambola
apple
durian
eggfruit
apple
banana
[root@waky practice]#

Чтобы отсортировать вывод по алфавиту, выполните команду:

sort название_файла

Пример:

[root@waky practice]# sort fruits.txt
apple
apple
banana
carambola
durian
eggfruit
[root@waky practice]#

sort можно применять не только к файлам, но и к выводу других команд, например:

[root@waky practice]# cat fruits.txt | sort
apple
apple
banana
carambola
durian
eggfruit
[root@waky practice]#

Таким образом, мы подаем вывод команды cat на ввод команде sort.

2. Обратная сортировка

Если нужно отсортировать в обратном порядке, добавьте ключ -r:

sort -r название_файла

Пример:

[root@waky practice]# sort -r fruits.txt
eggfruit
durian
carambola
banana
apple
apple
[root@waky practice]#

Как видим, теперь названия располагаются в обратном порядке.

3. Только уникальные значения

Вы наверняка заметили, что в нашем списке дважды встречается apple, если нам не важно, количество повторов, а нужны лишь уникальные значения, используйте опцию u:

sort -u название_файла

Пример:

[root@waky practice]# sort -u fruits.txt
apple
banana
carambola
durian
eggfruit
[root@waky practice]#

Результат исполнения не содержит повторов.

4. Числовая сортировка

Создадим еще один тестовый файл, но на этот раз наполним его числами:

[root@waky practice]# echo -e "33\n20\n21\n88\n132\n11" > numbers.txt
[root@waky practice]# cat numbers.txt
33
20
21
88
132
11
[root@waky practice]#

Попробуем отсортировать файл:

[root@waky practice]# sort numbers.txt
11
132
20
21
33
88
[root@waky practice]#

Все бы ничего, но почему то 132 оказалось между 11 и 20, вместо того, чтобы быть в самом конце. И в этом нет ошибки, по умолчанию bash воспринимает любую строку как текст, а в логике сортировки текста, 1 идет раньше 2.

Если мы хотим, чтобы sort относился к строкам как к числам, нужно дать ему указание, с помощью параметра n:

sort -n название_файла

Пример:

[root@waky practice]# sort -n numbers.txt
11
20
21
33
88
132
[root@waky practice]#

Вот теперь вывод содержит правильный числовой порядок.

Можно скомбинировать данный вывод с выводом по убыванию:

[root@waky practice]# sort -nr numbers.txt
132
88
33
21
20
11
[root@waky practice]#

5. Сортировка по столбцу

Подготовим очередной тестовый файл. На этот раз он будет содержать в каждой строке и название и число:

[root@waky practice]# echo -e "carambola 33\napple 20\ndurian 21\neggfruit 88\napple 132\nbanana 11" > fruits_and_numbers.txt
[root@waky practice]# cat fruits_and_numbers.txt
carambola 33
apple 20
durian 21
eggfruit 88
apple 132
banana 11
[root@waky practice]#

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

Мы можем это изменить, задав с помощью ключа -k, столбец по которому пойдет сортировка:

sort -k 2 название_файла

Пример:

[root@waky practice]# sort -n -k 2 fruits_and_numbers.txt
banana 11
apple 20
durian 21
carambola 33
eggfruit 88
apple 132
[root@waky practice]#

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

По умолчанию столбцы определяются пробелами. Давайте заменим в нашем файле пробелы другим символом, например |:

[root@waky practice]# sed -i 's/ /|/g' fruits_and_numbers.txt
[root@waky practice]# cat fruits_and_numbers.txt
carambola|33
apple|20
durian|21
eggfruit|88
apple|132
banana|11
[root@waky practice]#

Повторим попытку сортировки:

[root@waky practice]# sort -n -k 2 fruits_and_numbers.txt
apple|132
apple|20
banana|11
carambola|33
durian|21
eggfruit|88
[root@waky practice]#

Для sort теперь не существует второго столбца. В Linux могут встречаться разные разделители, чтобы подсказать программе, какой использовать в данном случае, используется опция t:

sort -t '|'  -k 2 название_файла

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

Пример:

[root@waky practice]# sort -n -t '|' -k 2 fruits_and_numbers.txt
banana|11
apple|20
durian|21
carambola|33
eggfruit|88
apple|132
[root@waky practice]#

Мы снова получили верный порядок строк.

Шпаргалка по основным параметрам sort

sort обладает множеством полезных опций. Вот основные из них:

ОпцияЗначениеЧто делает
-rобратный порядоксортирует строки в обратном порядке
-nчисловая сортировкасортирует по числовому значению
-uуникальные строкиудаляет повторяющиеся строки
-kключ сортировкисортирует по определенному полю
-tразделитель полейуказывает разделитель между полями

Заключение

Команда sort — это мощный инструмент для упорядочивания данных в Linux. Благодаря простому синтаксису и набору параметров, она отлично подойдет как начинающим, так и опытным пользователям.

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