Главная >> Команды >> Команда sort в Linux

Команда sort в Linux

Сегодня мы поговорим о команде 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

computer
mouse
LAPTOP
data
RedHat
laptop
debian
laptop

Также можно воспользоваться вот такой командой:

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

Опция -e указывает команде, что нужно обрабатывать спецсимволы, а \n, если кто не знает, не что иное как спецсимвол перевода строки в Linux.

1. Сортировка

Теперь давайте выполним сортировку строк linux в нашем файле:

sort test.txt

computer
data
debian
laptop
laptop
LAPTOP
mouse
RedHat

Вот несколько принципов, по которым команда sort linux сортирует строки:

  • Строки с цифрами размещаются выше других строк
  • Строки, начинающиеся с букв нижнего регистра размещаются выше
  • Сортировка выполняется в соответствии алфавиту
  • Строки сначала сортируются по алфавиту, а уже вторично по другим правилам.

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

Отсортируем файл в обратном порядке:

sort -r test.txt

RedHat
mouse
LAPTOP
laptop
laptop
debian
data
computer

3. Сортировка по колонке

Отсортируем вывод команды ls по девятой колонке, то есть по имени файла или папки. Колонку укажем опцией -k:

ls -l | sort -k9

drwxr-xr-x 6 user user 4096 дек 6 14:29 Android
drwx------ 3 user user 4096 янв 14 22:18 Desktop
drwxr-xr-x 12 user user 4096 янв 14 21:49 Documents
drwx------ 5 user user 12288 янв 15 14:59 Downloads
drwxr-xr-x 7 user user 4096 янв 13 11:42 Lightworks

Сортировка вывода Linux выполняется так же просто как и строк из файла.

4. Сортировка по номеру

Отсортируем вывод команды ls по второй колонке. Для сортировки по числовому значению используется опция -n:

 ls -l | sort -nk2

drwx------ 5 user user 12288 янв 15 14:59 Downloads
drwxr-xr-x 6 user user 4096 дек 6 14:29 Android
drwxr-xr-x 7 user user 4096 июн 10 2015 Sources
drwxr-xr-x 7 user user 4096 окт 31 15:08 VirtualBox
drwxr-xr-x 7 user user 4096 янв 13 11:42 Lightworks
drwxr-xr-x 8 user user 12288 янв 11 12:33 Pictures

5. Удаление дубликатов

Команда sort Linux позволяет не только сортировать строки, но и удалять дубликаты. Для этого есть опция -u:

sort -u test.txt

computer
data
debian
laptop
LAPTOP
mouse
RedHat

Теперь строчка laptop не повторяется.

6. Сортировка по нескольким полям

Мы можем сортировать данные по нескольким полям. Например, отсортируем вывод ls по второму первично и вторично девятому полях:

ls -l | sort -t "," -nk2,5 -k9

drwxr-xr-x 2 user user 4096 дек 6 14:32 Links
drwxr-xr-x 2 user user 4096 янв 13 10:43 tmp
drwx------ 3 user user 4096 янв 14 22:18 Desktop
drwxr-xr-x 3 user user 4096 мар 28 2015 Журналы
drwx------ 4 user user 12288 янв 15 15:42 Загрузки

Вот и все. Мы немного приоткрыли занавесу над возможностями сортировки строк linux с помощью команды sort. Если у вас остались вопросы - спрашивайте в комментариях!

7 комментариев к “Команда sort в Linux”

    • У них вообще...
      Такое чувство, что статьи состоят из наскоро сделанных копипаст.

      Вот у меня такое выдает команда:
      root@test:/var/log/exim4# ls -l | sort k9
      sort: cannot read: k9: No such file or directory

      Ответить
  1. Можно ли отобразить в одном столбце вывод команды full-upgrade? По умолчанию выводится список пакетов для обновления по строчно, что не очень удобно воспринимать.

    Ответить
  2. Добрый день.

    Есть файлы:
    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
      , то будут отсортированы в порядке числовой нумерации в начале имён файлов.

      Ответить
  3. Я как раз столкнулся с такой проблемой - названия директорий были в виде дат.
    Решение вот такое :
    ls | sort -t "." -k2,5 -k9
    20.10.2020
    21.10.2020
    22.10.2020
    23.10.2020
    24.10.2020

    Ответить

Оставьте комментарий