Если вы работаете в системе Linux, то, скорее всего, сталкивались с задачами упорядочивания данных. Например, сортировка списка файлов, строк в файле или результатов команды. Для этого существует команда sort.
В этой статье мы подробно расскажем, что такое команда sort, как она работает и как ей правильно пользоваться.
Что такое команда sort?
Команда sort — это встроенная в Linux команда, которая позволяет сортировать текстовые файлы или вывод других команд по определенным правилам. Она помогает упорядочить строки в алфавитном, числовом или другом порядке.
Почему команда sort так важна?
Она незаменима при работе с большими объемами данных, при обработке логов, списков или баз данных. С помощью sort можно быстро привести данные к нужному виду, что облегчает их анализ и дальнейшую работу.
Основные возможности команды sort
Вот главные функции, которые выполняет команда sort:
- Альфавитная сортировка — строки сортируются по алфавиту.
- Числовая сортировка — строки с числами упорядочиваются по их величине.
- Обратная сортировка — сортировка в обратном порядке.
- Уникальные строки — удаление повторяющихся строк.
- Сортировка по ключу — сортировка по определенному полю или повторяющемуся шаблону внутри строки.
Примеры использования команды sort
- 1. Простая сортировка
- 2. Обратная сортировка
- 3. Только уникальные значения
- 4. Числовая сортировка
- 5. Сортировка по столбцу
- Шпаргалка по основным параметрам 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, вы сможете лучше понять ее работу и повысить эффективность вашего труда.