Сегодня мы поговорим о команде sort. Это утилита для вывода текстовых строк в определенном порядке. Проще говоря, для сортировки. Ее можно использовать для сортировки текста из одного или нескольких файлов или c помощью нее может быть выполнена сортировка вывода linux для какой-либо команды. Это может быть полезно во многих случаях. Например, отсортировать файлы по размеру в выводе команды du или собрать частотность использования команд из истории.
В этой инструкции мы подробно рассмотрим возможности команды sort Linux, ее опции и разберем несколько примеров использования.
Содержание статьи
Синтаксис
Уже по традиции подобных статей, сначала рассмотрим общий синтаксис команды:
$ sort опции файл
Или
$ команда | sort опции
Опции
Теперь рассмотрим основные опции утилиты sort.
- -b - не учитывать пробелы
- -d - использовать для сортировки только буквы и цифры
- -i - сортировать только по ASCII символах
- -n - сортировка строк linux по числовому значению
- -r - сортировать в обратном порядке
- -с - проверить был ли отсортирован файл
- -o - вывести результат в файл
- -u - игнорировать повторяющиеся строки
- -m - объединение ранее отсортированных файлов
- -k - указать поле по которому нужно сортировать строки, если не задано, сортировка выполняется по всей строке.
- -f - использовать в качестве разделителя полей ваш символ вместо пробела.
Я понимаю, что многое из всего этого может быть непонятно, но на примерах все станет намного яснее.
Примеры использования sort
Наконец-то мы добрались к теме примеры sort Linux. Давайте сначала создадим файл с несколькими строками, на котором и будем проверять возможности утилиты.
nano test.txt
Также можно воспользоваться вот такой командой:
echo -e "computer\nmouse\nLAPTOP\ndata\nRedHat\nlaptop\ndebian\nlaptop" > test.txt
Опция -e указывает команде, что нужно обрабатывать спецсимволы, а \n, если кто не знает, не что иное как спецсимвол перевода строки в Linux.
1. Сортировка
Теперь давайте выполним сортировку строк linux в нашем файле:
sort test.txt
Вот несколько принципов, по которым команда sort linux сортирует строки:
- Строки с цифрами размещаются выше других строк
- Строки, начинающиеся с букв нижнего регистра размещаются выше
- Сортировка выполняется в соответствии алфавиту
- Строки сначала сортируются по алфавиту, а уже вторично по другим правилам.
2. Обратная сортировка
Отсортируем файл в обратном порядке:
sort -r test.txt
3. Сортировка по колонке
Отсортируем вывод команды ls по девятой колонке, то есть по имени файла или папки. Колонку укажем опцией -k:
ls -l | sort -k9
Сортировка вывода Linux выполняется так же просто как и строк из файла.
4. Сортировка по номеру
Отсортируем вывод команды ls по второй колонке. Для сортировки по числовому значению используется опция -n:
ls -l | sort -nk2
5. Удаление дубликатов
Команда sort Linux позволяет не только сортировать строки, но и удалять дубликаты. Для этого есть опция -u:
sort -u test.txt
Теперь строчка laptop не повторяется.
6. Сортировка по нескольким полям
Мы можем сортировать данные по нескольким полям. Например, отсортируем вывод ls по второму первично и вторично девятому полях:
ls -l | sort -t "," -nk2,5 -k9
Вот и все. Мы немного приоткрыли занавесу над возможностями сортировки строк linux с помощью команды sort. Если у вас остались вопросы - спрашивайте в комментариях!
У вас в конце списка опций sort указана -f, а описание для неё взято от опции -t. Очепятка, однако 🙂
У них вообще...
Такое чувство, что статьи состоят из наскоро сделанных копипаст.
Вот у меня такое выдает команда:
root@test:/var/log/exim4# ls -l | sort k9
sort: cannot read: k9: No such file or directory
Можно ли отобразить в одном столбце вывод команды full-upgrade? По умолчанию выводится список пакетов для обновления по строчно, что не очень удобно воспринимать.
Как осуществить сортировку по дате?
Добрый день.
Есть файлы:
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt
10.txt
11.txt
и так до, например, 1000.
Отсортировать нужно по имени.
При использовании получается вот так:
53.ts 978.ts
530.ts 979.ts
531.ts 98.ts
532.ts 980.ts
533.ts 981.ts
534.ts 982.ts
535.ts 983.ts
536.ts 984.ts
537.ts 985.ts
538.ts 986.ts
539.ts 987.ts
54.ts 99.ts
540.ts input_list.txt
541.ts tsMuxeR
542.ts wget.list.m3u8
543.ts wget.log
544.ts Что мешает вам написать книгу.pdf
545.ts
то есть 54.ts идет после 539.ts, но так не надо.
Как отсортировать имена по порядку?
PS ОС - Mac OS. Finder прекрасно сортирует так, как надо, но нужно вывод с путями к файлу положить в текстовый файл.
Добрый день! Точный ответ на Ваш вопрос даст man sort в Вашей ОС. Основываясь на материале статьи в cygwin провёл опыт:
ls -l | sort -n -k7
команда выше даёт сортировку списка файлов по столбцу даты - всё красиво.
Если поменять -k7 на -k9
, то будут отсортированы в порядке числовой нумерации в начале имён файлов.
Я как раз столкнулся с такой проблемой - названия директорий были в виде дат.
Решение вот такое :
ls | sort -t "." -k2,5 -k9
20.10.2020
21.10.2020
22.10.2020
23.10.2020
24.10.2020