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

Команда sort – это программа для Linux, предназначенная для печати строк входных текстовых файлов и объединения всех файлов в отсортированном порядке. В качестве разделителя полей команда sort использует пустой пробел, а в качестве ключа сортировки – весь входной файл. Важно отметить, что команда sort на самом деле не сортирует файлы, а только печатает отсортированный вывод.

1. Создание текстового файла с заданным содержимым

Сначала создадим текстовый файл с именем „tecmint.txt“, который будет использоваться для выполнения примеров команды „sort“ в рабочем каталоге „/home/$USER/Desktop/tecmint“.

Опция -e в приведенной ниже команде позволяет интерпретировать обратный слеш, а /n указывает команде echo на запись каждой строки в новую строку.

echo -e "computer\nmouse\nLAPTOP\ndata\nRedHat\nlaptop\ndebian\nlaptop" > tecmint.txt

2. Просмотр содержимого файла

Прежде чем приступить к выполнению команды „sort“, посмотрим на содержимое файла и его внешний вид с помощью следующей команды cat.

cat tecmint.txt

3. Сортировка содержимого файла

Команда «sort tecmint.txt» используется для перестановки строк в файле в возрастающем алфавитном порядке, если есть дубликаты строк, то сохраняется по одной копии каждой уникальной строки.

sort tecmint.txt

Примечание: Приведенная команда не сортирует содержимое текстового файла, а только выводит отсортированный вывод на терминал

4. Перенаправление отсортированного вывода в новый файл

Следующая команда используется для сортировки строк текстового файла «tecmint.txt» в алфавитном порядке, а затем перенаправляет отсортированный вывод в новый файл с именем «sorted.txt», т.е. исходный файл остается неизменным, а отсортированное содержимое хранится в отдельном файле.

Для проверки содержимого используйте команду cat.

sort tecmint.txt >sorted.txt
cat sorted.txt

5. Сортировка содержимого файла в обратном порядке

Следующая команда используется для сортировки строк текстового файла «tecmint.txt» в обратном порядке, то есть она расположит строки в убывающем алфавитном порядке, а отсортированный вывод перенаправит в новый файл с именем «reversesorted.txt»

sort -r tecmint.txt >reversesorted.txt
cat reversesorted.txt

6. Сохранение списка файлов и каталогов

Следующая команда использует команду ls для детального просмотра содержимого домашнего каталога пользователя («*/home/$USER*») в длинном формате и перенаправляет этот список каталогов в текстовый файл с именем «lsl.txt», расположенный на рабочем столе пользователя, а именно в каталоге «tecmint».

ls -l /home/$USER >/home/$USER/Desktop/tecmint/lsl.txt
cat lsl.txt

Теперь мы рассмотрим примеры сортировки содержимого на основе полей, отличных от начальных символов по умолчанию.

7. Сортировка „содержимого файла по второму полю

Следующая команда предназначена для сортировки содержимого файла «lsl.txt» по значениям во втором поле каждой строки. Опция -n указывает на числовую сортировку, рассматривая второе поле не как текст, а как числа.

Опция '-k2' указывает на то, что мы хотим сортировать по второму полю. Выполнив эту команду, вы получите отсортированный список строк в файле «lsl.txt», критерием сортировки которого являются числовые значения во втором поле каждой строки.

sort -nk2 lsl.txt

8. Сортировка содержимого файла по девятому полю

Следующая команда используется для сортировки строк файла «lsl.txt» по значениям в девятом поле каждой строки в порядке возрастания. Опция -k9 указывает, что сортировка должна производиться по девятому полю.

sort -k9 lsl.txt

9. Сортировка файлов по размеру файла

Следующая команда сочетает команды „ls“ и „sort“ для получения списка содержимого домашнего каталога пользователя в формате длинного списка, а затем передает список каталогов в sort -nk5, который сортирует список на основе значений в пятом столбце, представляющих размеры файлов.

ls -l /home/$USER | sort -nk5

10. Удаление дублирующихся строк в файле

Следующая команда сортирует строки в файле «tecmint.txt» в возрастающем алфавитном порядке и удаляет дублирующиеся строки с помощью опции -u, которая означает «unique», и обеспечивает сохранение уникальных строк в отсортированном выводе.

cat tecmint.txt
sort -u tecmint.txt

Правила на данный момент (то, что мы наблюдали):

  • Строки, начинающиеся с цифр, предпочтительнее в списке и лежат сверху, пока не указано иное (-r).
  • Строки, начинающиеся со строчных букв, предпочтительнее в списке и лежат сверху, пока не указано иное (-r).
  • Содержание перечисляется по встречаемости алфавитов в словаре, пока не указано иное (-r).
  • Команда Sort по умолчанию рассматривает каждую строку как строку и затем сортирует ее в зависимости от встречаемости букв в словаре (предпочтительнее числовые; см. правило – 1), если не указано иное.

11. Перенаправление списка каталогов в файл

Следующая команда перечисляет содержимое домашнего каталога пользователя в длинном формате, включая скрытые файлы и каталоги, а затем перенаправляет список каталогов в текстовый файл с именем «lsla.txt», расположенный на рабочем столе пользователя в каталоге «tecmint».

ls -lA /home/$USER >/home/$USER/Desktop/tecmint/lsla.txt
cat lsla.txt

Те, кто знаком с командой ls, понимают, что ls -lA эквивалентно ls -l плюс скрытые файлы. В результате большая часть содержимого этих двух команд будет одинаковой.

12. Сортировка содержимого файлов

Следующая команда сортирует содержимое двух текстовых файлов, „lsl.txt“ и „lsla.txt“, в возрастающем алфавитном порядке, а затем объединяет и выводит отсортированное содержимое в терминал.

sort lsl.txt lsla.txt

Обратите внимание на повторение файлов и папок.

13. Удаление дублирующих строк в файле

Следующая команда объединяет и сортирует содержимое двух текстовых файлов „lsl.txt“ и „lsla.txt“ в возрастающем алфавитном порядке, удаляя при этом дубликаты строк с помощью опции -u, которая обеспечивает сохранение уникальных строк в отсортированном выводе.

sort -u lsl.txt lsla.txt

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

14. Сортировка вывода по нескольким полям с использованием пользовательского разделителя

Следующая команда объединяет команды „ls“ и „sort“ для получения списка содержимого домашнего каталога пользователя в длинном формате, а затем передает список каталогов команде „sort“, которая сортирует вывод по определенным столбцам и полям.

ls -l /home/$USER | sort -t "," -nk2,5 -k9

Вот описание команды:

  • -t "," – указывает, что в качестве разделителя полей используется запятая (",").
  • -nk2,5 – указывает на сортировку по числовому значению в столбцах 2-5, которые обычно представляют разрешения и данные о правах собственности.
  • -k9 – дальнейшая сортировка результата на основе девятого столбца, в котором представлены размеры файлов.

На этом все. В следующей статье мы рассмотрим более подробные примеры работы команды sort.

15. Сортировка содержимого файла по месяцам

Следующая команда сортирует содержимое файла «month.txt» в хронологическом порядке на основе аббревиатуры или названия месяца, используя опцию -M, которая указывает команде „sort“ рассматривать данные как даты и сортировать их соответствующим образом.

sort -M month.txt

16. Сортировка выходных данных по размеру файла в человекочитаемом формате

Следующая команда объединяет команды „ls“ и „sort“ для выполнения двух задач. Во-первых, она выводит список содержимого домашнего каталога пользователя в длинном формате, а затем передает этот список каталогов команде „sort“ для вывода размеров файлов в удобном для восприятия формате, что облегчает определение самых больших и самых маленьких файлов в каталоге.

ls -l /home/$USER | sort -h -k5

17. Проверка отсортированных файлов на согласованность

В предыдущей статье мы сгенерировали два текстовых файла: „sorted.txt“ в примере №4 и „lsl.txt“ в примере №6. Мы знаем, что файл „sorted.txt“ уже отсортирован, а файл „lsl.txt“ – нет.

Для проверки состояния сортировки обоих файлов мы воспользуемся командой „sort“, которая позволит нам убедиться, что файл „sorted.txt» остается в правильном порядке и требует ли «lsl.txt» сортировки.

sort -c sorted.txt

Если она возвращает0, значит, файл отсортирован и конфликта нет.

sort -c lsl.txt

18. Работа с разделителями при отсутствии пробелов в файле

Если разделителем между словами является пробел, то команда „сортировать“ автоматически интерпретирует все, что находится после горизонтального пробела, как новое слово. Но что происходит, когда разделитель не является пробелом?

Рассмотрим текстовый файл, содержимое которого разделено чем-либо, кроме пробела, например, '|' или '\' или '+' или '.' или ...</code.

Создадим текстовый файл, содержимое которого разделено + . Используйте команду cat для проверки содержимого файла.

echo -e "21+linux+server+production\n11+debian+RedHat+CentOS\n131+Apache+Mysql+PHP\n7+Shell Scripting+python+perl\n111+postfix+exim+sendmail" >delimiter.txt
cat delimiter.txt

Теперь отсортируйте этот файл по 1-му полю, которое является числовым.

sort -t '+' -nk1 delimiter.txt

Второе – по 4-му полю, которое не является числовым.

Если разделителем является*Tab*, вы можете использовать $'\t' вместо '+', как показано в примере выше.

19. Случайная сортировка результатов по размеру файла

Сортируйте результаты команды ls -l для домашнего каталога на основе пятого столбца, который представляет собой «количество данных», в случайном порядке.

ls -l /home/avi/ | sort -k5 -R

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

Как следует из Правила № 2 из предыдущей статьи, команда sort предпочитает строки, начинающиеся со строчных символов, а не с прописных. Проверьте также пример 3 из предыдущей статьи, где строка „laptop“ встречается раньше строки „LAPTOP“.

20. Переопределение стандартных предпочтений сортировки

Как переопределить стандартные предпочтения сортировки? Прежде чем отменить стандартную сортировку, необходимо экспортировать переменную окружения 'LC_ALL' в 'C' .

Для этого выполните приведенный ниже код в приглашении командной строки.

export LC_ALL=C

Затем отсортируйте текстовый файл „tecmint.txt», переопределив предпочтение сортировки по умолчанию.

sort tecmint.txt

Не забудьте сравнить полученный результат с тем, который был получен в примере 3, а также вы можете использовать опцию -f --ignore-case для получения более упорядоченного результата.

sort -f tecmint.txt

21. Объединение двух входных файлов за одну операцию

Как насчет того, чтобы запустить „sort“ для двух входных файлов и объединить их за один раз?

Создадим два текстовых файла, а именно „file1.txt“ и „file2.txt“, и заполним их некоторыми данными. В файл „file1.txt“ мы добавим числа, как показано ниже. Мы также используем команду cat для просмотра содержимого файла

echo -e “5 Reliable\n2 Fast\n3 Secure\n1 open-source\n4 customizable” >file1.txt
cat file1.txt

И заполним второй файл „file2.txt“ некоторыми данными, как показано на рисунке.

echo -e “3 RedHat\n1 Debian\n5 Ubuntu\n2 Kali\n4 Fedora” >file2.txt
cat file2.txt

А теперь отсортируем и объединим результаты обоих файлов.

join<(sort -n file1.txt)<(sort file2.txt)

Заключение

В заключение этой статьи мы рассмотрели различные аспекты использования команды „sort“ в Linux. Мы начали с базовой сортировки по алфавиту, перешли к сортировке по числам и датам, и даже затронули тему пользовательских разделителей. Кроме того, мы узнали, как изменить стандартные настройки сортировки в соответствии с нашими потребностями.

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

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

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.tecmint.com

Похожие статьи

Комментарии (0)