Linux. Команда sort

22.02.2018

Теги: BashCLILinuxКоманда

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

$ sort [опции] файл(ы)

Рассмотрим несколько примеров.

$ cat linux.txt
Ubuntu
Redhat
Centos
Centos
Debian
Fedora
$ sort linux.txt
Centos
Centos
Debian
Fedora
Redhat
Ubuntu

Опция -u предписывает команде sort исключить дубликаты строк.

$ sort -u linux.txt
Centos
Debian
Fedora
Redhat
Ubuntu

Опция -r позволяет изменить порядок сортировки на обратный.

$ sort -r linux.txt
Ubuntu
Redhat
Fedora
Debian
Centos
Centos

Опция -o перенаправляет вывод команды в файл.

$ sort linux.txt -o sorted.txt
$ cat sorted.txt
Centos
Centos
Debian
Fedora
Redhat
Ubuntu

Зачастую требуется отсортировать строки в файле, заменив в нем первоначальные данные отсортированными. Но если ввести команду:

$ sort filename > filename

то содержимое файла filename будет очищено. А с помощью опции -o вполне допустимо указывать одно и то же имя входного и выходного файла.

Опция -n используется, когда нужно сортировать числа, а опция -k позволяет задавать столбец (колонку) сортировки.

$ cat phonebook.txt
Alice   Chebba   973-555-2015 12
Barbara Swingle  201-555-9257 -5
Liz     Stachiw  212-555-2298 21
Susan   Goldberg 201-555-7776 17
Susan   Topple   212-555-4932 -3
Tony    Iannino  973-555-1295 11

Сортировка по второй колонке (фамилия):

$ sort -k2 phonebook.txt
Alice   Chebba   973-555-2015 12
Susan   Goldberg 201-555-7776 17
Tony    Iannino  973-555-1295 11
Liz     Stachiw  212-555-2298 21
Barbara Swingle  201-555-9257 -5
Susan   Topple   212-555-4932 -3

Сортировка по последней колонке, по возрастанию чисел:

$ sort -k4n phonebook.txt
Barbara Swingle  201-555-9257 -5
Susan   Topple   212-555-4932 -3
Tony    Iannino  973-555-1295 11
Alice   Chebba   973-555-2015 12
Susan   Goldberg 201-555-7776 17
Liz     Stachiw  212-555-2298 21
Опция -k позволяет указать не только колонку, по которой надо сортировать — но и номер символа в этой колонке — например -k2.5. Это значит — сортировать по второй колонке, но не учитывать символы с первого по четвертый.

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

$ sort /etc/passwd -k3 -t:

Опция -b игнорирует пробелы в начале строк.

Опция -f отменяет чувствительность к регистру.

Опция -d признает только буквы, цифры и пробелы и сортирует как в словаре.

$ sort --help
Использование: sort [ПАРАМЕТР]… [ФАЙЛ]…
       или:    sort [ПАРАМЕТР]… --files0-from=Ф

Печатает сортированное слияние всех ФАЙЛ(ов) на стандартный вывод.

Если ФАЙЛ не задан или задан как -, читает стандартный ввод.

Аргументы, обязательные для длинных параметров, обязательны и для коротких.

Параметры, задающие порядок:
  -b, --ignore-leading-blanks игнорировать начальные пропуски
  -d, --dictionary-order      рассматривать только пропуски, буквы и цифры
  -f, --ignore-case           игнорировать регистр букв
  -g, --general-numeric-sort  сравнивать в соответствии с общим числовым
                              значением
  -i, --ignore-nonprinting    рассматривать только печатные символы
  -M, --month-sort            сравнивать (неизвестно) < «JAN» < … < «DEC»
  -h, --human-numeric-sort    сравнивать числа в удобном для человека виде
                              (например, 2K 1G)
  -n, --numeric-sort          сравнивать по числовым значениям строк
  -R, --random-sort           перетасовать, но группировать одинаковые
                              параметры, смотрите shuf(1)
      --random-source=ФАЙЛ    брать случайные байты из ФАЙЛА
  -r, --reverse               изменить результаты сравнения на противоположные
      --sort=СЛОВО            сортировать согласно СЛОВУ:
                                general-numeric -g, human-numeric -h, month -M,
                                numeric -n, random -R, version -V
  -V, --version-sort          сортировать по номерам (версии) в текстовом
                              представлении

Другие параметры:
      --batch-size=NMERGE     объединять не более чем NMERGE ввода за раз;
                              для большего — использовать временные файлы
  -c, --check, --check=diagnose-first
                               проверять, сортированы ли входные файлы;
                               сортировка не выполняется
  -C, --check=quiet, --check=silent
                               как -c, но не сообщать о первой плохой строке
      --compress-program=ПРОГ  сжимать временные файлы командой ПРОГ;
                               разжимать командой ПРОГ -d
      --debug                  комментировать часть строки, используемой для
                               сортировки и предупреждать о сомнительном
                               использовании в stderr
      --files0-from=Ф          читать ввод из файлов, имена которых
                               (завершённые нулем) перечислены в файле Ф.
                               Если Ф равно -, то читать имена файлов из
                               стандартного ввода
  -k, --key=ОПР_КЛЮЧА          сортировать по ключу; в ОПР_КЛЮЧА
                               задано расположение и тип
  -m, --merge                  объединить уже отсортированные файлы,
                               сортировку не выполнять
  -o, --output=ФАЙЛ            выводить в ФАЙЛ, а не на стандартный вывод
  -s, --stable                 стабилизировать сортировку, исключив проверку
                               на равенство
  -S, --buffer-size=РАЗМЕР
                               использовать в основной памяти буфер указанного
                               РАЗМЕРА
  -t, --field-separator=РАЗДЕЛИТЕЛЬ
                               использовать при поиске ключевых полей
                               РАЗДЕЛИТЕЛЬ, а не переход от непробельных
                               символов к пробельным
  -T, --temporary-directory=КАТАЛОГ
                               использовать для временных файлов КАТАЛОГ, а
                               не $TMPDIR или /tmp; несколько таких параметров
                               задают несколько каталогов
      --parallel=N             изменить количество одновременно запущенных
                               сортировок до N
  -u, --unique                 с -c, проверять порядок строго;
                               без -c, выводить только первое среди
                               нескольких равных
  -z, --zero-terminated        разделитель строк NUL, а не символ
                               новой строки
      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти

ОПР_КЛЮЧА задается как F[.C][OPTS][,F[.C][OPTS]] для начала и конца
положения, где F — номер поля, а C — позиция в поле, оба отсчитываются
от 1, а конечная позиция по умолчанию равна концу строки.
Если не задан параметр -t или -b, то символы в поле отсчитываются от начала
предшествующего пробельного символа. OPTS составляется из одной или
нескольких букв, задающих порядок сортировки [bdfgiMhnRrV]; он переопределяет
соответствующие глобальные параметры сортировки для данного ключевого поля.
Если параметр не задан, то в качестве ключа используется строка целиком.
Для обнаружения использования некорректного ключа укажите --debug.

После РАЗМЕРА можно указывать следующие суффиксы-мультипликаторы:
% 1% памяти, b 1, k 1024 (по умолчанию), и так далее для M, G, T, P, E, Z, Y.

ПРЕДУПРЕЖДЕНИЕ
Установленная в окружении локаль влияет на порядок сортировки.
Чтобы получить традиционный порядок, использующий системные значения байт,
установите LC_ALL=C.

Поиск: Bash • CLI • Linux • Команда • Сортировка • sort

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.