Sort linux примеры
Команда SORT в Linux / Unix с примерами
Команда SORT используется для сортировки файла, упорядочивая записи в определенном порядке. По умолчанию команда sort сортирует файл, предполагая, что его содержимое — ASCII. Используя опции в команде сортировки, она также может быть использована для числовой сортировки.
- Команда SORT сортирует содержимое текстового файла построчно.
- sort — это стандартная программа командной строки, которая печатает строки ввода или объединения всех файлов, перечисленных в списке аргументов, в отсортированном порядке.
- Команда sort — это утилита командной строки для сортировки строк текстовых файлов. Он поддерживает сортировку по алфавиту, в обратном порядке, по номеру, по месяцам, а также может удалять дубликаты.
- Команда sort также может сортировать элементы, находящиеся не в начале строки, игнорировать чувствительность к регистру и возвращать, отсортирован файл или нет. Сортировка выполняется на основе одного или нескольких ключей сортировки, извлеченных из каждой строки ввода.
- По умолчанию весь ввод принимается как ключ сортировки. Пробел является разделителем полей по умолчанию.
Команда sort следует этим функциям, как указано ниже:
- Строки, начинающиеся с цифры, появятся перед строками, начинающимися с буквы.
- Строки, начинающиеся с буквы, которая появляется раньше в алфавите, будут появляться перед строками, начинающимися с буквы, которая появляется позже в алфавите.
- Строки, начинающиеся со строчной буквы, появятся перед строками, начинающимися с той же буквы в верхнем регистре.
Примеры
Предположим, вы создали файл данных с именем file.txt
Сортировка файла: теперь используйте команду сортировки
Синтаксис:
Примечание. Эта команда фактически не меняет входной файл, то есть file.txt.
Функция сортировки с файлом микширования, то есть с заглавными и строчными буквами: если у нас есть файл микширования с прописными и строчными буквами, то сначала сортируются строчные буквы, а затем заглавные.
Пример:
Создайте файл mix.txt
Теперь используйте команду сортировки
Опции с функцией сортировки
- -o Опция: Unix также предоставляет нам специальные возможности, например, если вы хотите записать вывод в новый файл output.txt, перенаправить вывод, как это, или вы также можете использовать встроенную опцию сортировки -o, которая позволяет вам указать выходной файл.
Использование параметра -o функционально аналогично перенаправлению вывода в файл.
Примечание: ни один из них не имеет преимущества перед другим.
Пример: входной файл такой же, как указано выше.
Синтаксис:
-r Опция:сортировка в обратном порядке : вы можете выполнить сортировку в обратном порядке, используя флаг -r. флаг -r — это опция команды сортировки, которая сортирует входной файл в обратном порядке, то есть по убыванию по умолчанию.
Пример: входной файл такой же, как указано выше.
Синтаксис:
-n Опция: Для сортировки файла Численно используется опция -n. Опция -n также предопределена в unix, как и вышеупомянутые опции. Эта опция используется для сортировки файла с числовыми данными, присутствующими внутри.
Пример :
Давайте рассмотрим файл с номерами:
Опция -nr : для сортировки файла с числовыми данными в обратном порядке мы можем использовать комбинацию двух опций, как указано ниже.
Пример: числовой файл такой же, как указано выше.
Синтаксис:
-k Опция : Unix предоставляет возможность сортировки таблицы по любому номеру столбца с помощью опции -k.
Используйте опцию -k для сортировки по определенному столбцу. Например, используйте «-k 2» для сортировки по второму столбцу.
Пример :
Давайте создадим таблицу с 2 столбцами
Опция -c: эта опция используется, чтобы проверить, был ли данный файл уже отсортирован или нет & проверяет, отсортирован ли уже файл, передайте опцию -c для сортировки. Это приведет к записи в стандартный вывод, если есть строки, которые не в порядке. Инструмент сортировки может использоваться, чтобы понять, отсортирован ли этот файл и какие строки не в порядке.
Пример :
Предположим, существует файл со списком автомобилей с именем cars.txt.
Параметр -u: для сортировки и удаления дубликатов передайте параметр -u для сортировки. Это запишет отсортированный список в стандартный вывод и удалит дубликаты.
Эта опция полезна, так как удаляемые дубликаты дают нам избыточный файл.
Пример. Предположим, существует файл со списком автомобилей с именем cars.txt.
Параметр -M: для сортировки по месяцам укажите параметр -M для сортировки. Это запишет отсортированный список в стандартный вывод, упорядоченный по названию месяца.
Пример:
Предположим, что следующий файл существует и сохраняется как months.txt
февраль
январь
марш
августейший
сентябрь
Использование опции -M с сортировкой позволяет нам заказать этот файл.
Применение и использование команды сортировки
- Он может сортировать любой тип файла, будь то табличный файл, текстовый файл, числовой файл и так далее.
- Сортировка может быть осуществлена напрямую из одного файла в другой, не мешая текущей работе.
- Сортировка файлов таблиц по столбцам была упрощена и упрощена.
- Так много вариантов доступно для сортировки всеми возможными способами.
- Наиболее выгодное использование заключается в том, что конкретный файл данных может использоваться много раз, поскольку в предоставленном входном файле не вносятся никакие изменения.
- Исходные данные всегда безопасны и не мешают.
Эта статья предоставлена Мохаком Агравалом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Sort linux примеры
Наши партнеры
Библиотека сайта rus-linux.net
НАЗВАНИЕ
sort — сортировка и/или слияние файлов
ОПИСАНИЕ
Команда sort сортирует строки, входящие во все исходные файлы, и выдает результат на стандартный вывод. Если имена файлов не указаны, или в качестве файла указан -, исходная информация поступает со стандартного ввода.
При упорядочении используется один или несколько ключей сортировки, выделяемых из каждой вводимой строки. По умолчанию ключ сортировки один — вся строка, а порядок является лексикографическим, соответствующим принятой кодировке символов.
Следующие опции изменяют стандартный порядок работы: -c Проверить, является ли (единственный) исходный файл уже отсортированным. На стандартный вывод ничего не выдается. В стандартный протокол выводится соответствующее сообщение только в случае нарушения упорядоченности строк.
-m Только слияние исходных файлов, которые предполагаются отсортированными.
-u Опция уникальности: из всех совпадающих строк выводить только одну.
-o выходной_файл Результат направляется не на стандартный вывод, а в выходной_файл, который может совпадать с одним из исходных.
-yкилобайт Количество дополнительной памяти, используемой командой sort, существенно влияет на скорость ее работы. Если опция -y отсутствует, sort начинает работу, используя область памяти некоторого стандартного размера, а в случае необходимости запрашивает дополнительную память. Если опция -y задана с аргументом, команда sort начинает работу, используя указанное число килобайт памяти, если только не нарушены ограничения сверху или снизу; в этом случае используется соответствующее крайнее значение. Таким образом, указание -y0 гарантирует использование минимального объема памяти. Опция -y без аргумента задает область памяти максимального размера.
-zдлина Во время сортировки запоминается размер самой длинной строки, так что для фазы слияния команда sort может отвести буфер нужного размера. Если, в силу действия опций -c или -m, фаза сортировки пропускается, используется некоторый стандартный размер. Наличие строк, превышающих по длине буфер, приводит к аварийному завершению команды. Задание заведомо достаточной длины гарантирует нормальное выполнение слияния.
Следующие опции позволяют выбрать нужный способ сравнения: -d «Словарный» порядок: при сравнении являются значимыми только буквы, цифры, пробелы и знаки табуляции.
-f Преобразовывать малые буквы в большие.
-i При нечисловых сравнениях игнорировать символы с (восьмеричными) кодами, не лежащими в пределах 040-0176.
-M Сравнивать как месяца. Первые три символа, отличные от пробела, сравниваются таким образом, что «JAN» -n Числовое сравнение. Начальные пробелы отбрасываются, затем цифровые цепочки символов, содержащие быть может знак минус и десятичную точку, сравниваются как числа. Эта опция включает опцию -b (см. ниже). Отметим, что опция -b действует только на ключи сортировки с наложенными ограничениями.
-r Заменить результат сравнения на противоположный.
Если опции, задающие способ сравнения, указаны до ограничений на ключи сортировки, то они применяются глобально ко всем ключам. Если же соответствующие флаги ассоциированы с определенными ключами сортировки (см. ниже), они воздействуют только на «свои» ключи.
Полем называется минимальная последовательность символов, за которой следует разделитель полей или перевод строки. По умолчанию символом-разделителем считается пробел или символ табуляции. Пробелы и табуляции сразу вслед за разделителем (если они есть) принадлежат следующему полю. Все пробелы в начале строки входят в первое поле. На трактовку разделителей влияют следующие опции: -b Игнорировать начальные пробелы при определении начала и конца ключей сортировки. Если опция -b указана перед первым аргументом +позиция_1, она действует на все ключи с наложенными ограничениями. Флаг b можно связать и с отдельными ключами сортировки (см. ниже).
-tразделитель Использовать заданный символ как разделитель полей. Разделитель не является частью поля (хотя и может входить в ключ сортировки). Каждое вхождение разделителя является значимым, то есть два рядом стоящих разделителя ограничивают пустое поле.
При наложении ограничения на ключ сортировки указывается позиция начала ключа (+позиция_1) и позиция сразу за концом ключа (-позиция_2). Если опция -позиция_2 отсутствует, ключ занимает весь остаток строки.
Позиция_1 и позиция_2 задаются как пара m.n, возможно, с последующими флагами bdfiMnr. Начальная позиция задается как +m.n, что означает (n+1)-ый символ в (m+1)-ом поле (поля и символы нумеруются с единицы). Отсутствие .n означает .0, то есть первый символ (m+1)-го поля. Если указан флаг b, то n отсчитывается от первого непробела в (m+1)-ом поле; +m.0b означает первый непробел в (m+1)-ом поле.
Позиция за концом ключа записывается как -m.n, что означает (n+1)-ый символ (включая разделители) после последнего символа m-го поля. Если .n опущено, то подразумевается .0, то есть разделитель после m-го поля. Если указан флаг b, то n отсчитывается от первого непробела в (m+1)-ом поле.
Если указано несколько ключей сортировки, то более поздние используются только в случае равенства более ранних. Если значения ключей сортировки двух строк совпадают, строки упорядочиваются с учетом всех символов.
ПРИМЕРЫ
- Отсортировать файл f1, используя в качестве ключа второе поле:
- Отсортировать по убыванию содержимое файлов f2 и f3, поместив результат в файл f4. Ключом сортировки служит первый символ второго поля:
- Отсортировать по убыванию содержимое файлов f5 и f6. Ключом сортировки служит первый непробел второго поля:
- Распечатать файл паролей [см. passwd], отсортировав его по числовым значениям идентификаторов пользователей (третье поле, поля разделяются символом :):
- Распечатать строки уже отсортированного файла f7, выводя лишь первую из строк с одинаковыми третьими полями:
Если в последней строке файла пропущен символ возврата каретки, то он добавляется автоматически, о чем выдается предупреждение.
ПРЕДОСТЕРЕЖЕНИЯ
Не гарантируется сохранение порядка следования строк с равными ключами.
Не оговаривается приоритет различных способов сравнения (например, числового и словарного), поэтому задавать комбинацию флагов dMn не имеет смысла.
Команда sort в Linux
sort – простая и очень полезная команда, которая меняет порядок строк в текстовом файле, то есть осуществляет их сортировку по алфавиту или в соответствии с числовыми значениями. По умолчанию правила сортировки следующие:
- строки, начинающиеся с цифр, выводятся раньше строк, начинающихся с букв;
- строки, начинающиеся с букв, выводятся в алфавитном порядке;
- строки, начинающиеся со строчных букв, выводятся раньше строк, начинающихся с таких же заглавных.
Правила сортировки можно изменять при помощи опций. Мы рассмотрим их ниже.
Синтаксис
Основной синтаксис команды следующий
Команда также может быть использована в составе конвейеров (пайпов). Например
Опции
Как видим, сейчас строки выводятся в том же порядке как и были записаны. Для его сортировки в алфавитном порядке выполните команду:
Вы получите следующий результат:
Как видим сейчас строки отсортированы в алфавитном порядке.
Вывод результатов в файл
Команда sort не изменяет исходный файл, а просто выводит его содержимое в отсортированном виде. Чтобы сохранить результаты сортировки, воспользуйтесь опцией -o или перенаправлением вывода:
Выведем файл output.txt:
Вывод результатов в обратном порядке
Опция -r позволяет выводить результаты сортировки в обратном порядке:
Сортировка по заданным полям
Для сортировки по определенным полям используется опция –k. Она указывается в следующем формате:
Где ПОЛЕ1 и т.д. – номер поля (столбца), по которому осуществляется сортировка. Для примера создадим новый файл prices.txt со следующим содержимым:
Для его сортировки по второму столбцу можно выполнить следующую команду:
Результат будет следующим
На первый взгляд кажется что команда сработала неправильно. Действительно, кажется что в самом верху должны стоять сливы, а яблоки нижней строкой, да и апельсины дороже банан. Но на самом деле команда sort воспринимает цифры не как число, а как строку, т.е сортировка происходит по первой цифре. Вот тогда все встает на свои места команда вывела последовательность не числовую сортировку «200-150-80-60-50» а строковую «1-2-5-6-8».
Опцию -k можно задавать в более сложном виде. Каждое поле задается в виде X.Y, где X – номер поля, а Y – начальная позиция поля, с которой начинается сортировка. Для примера создадим файл employee.txt со следующим содержимым:
Если просто указать номер поля, результат сортировки будет следующим:
Значение начальной позиции сортировки 4 заставит команду игнорировать первые 3 буквы и начнет сортировку с 4-й, т.е после «ст.» и «мл.»
Удаление дублирующих записей
Опция -u удаляет из результатов дублирующие записи и выводит только уникальные поля. Допустим, у нас есть файл cars.txt со следующими данными:
Выведет следующий результат:
Проверка сортировки
Опция -с позволяет проверить, отсортированы ли данные в файле. Если выполнение команды с этой опцией не возвращает никакого результата, значит, строки файла уже упорядочены. Иначе будут выведены строки, нарушающие порядок сортировки. Допустим, файл cars2.txt содержит следующие данные:
Audi
Cadillac
BMW
Dodge
Для проверки выполним следующую команду:
Вот ее результат.
Мы видим, что строка «BMW» нарушает порядок сортировки:
Заключение
Команда sort – простой, но очень мощный и полезный при работе с данными инструмент. У нее есть множество разнообразных опций, помимо уже рассмотренных, которые можно узнать на соответствующей man-странице. Кроме того, ее можно использовать совместно с командами find и join для поиска по большому количеству файлов или объединения результатов.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Команда 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. Давайте сначала создадим файл с несколькими строками, на котором и будем проверять возможности утилиты.
computer
mouse
LAPTOP
data
RedHat
laptop
debian
laptop
Также можно воспользоваться вот такой командой:
echo -e «computernmousenLAPTOPndatanRedHatnlaptopndebiannlaptop» > test.txt
Опция -e указывает команде, что нужно обрабатывать спецсимволы, а n, если кто не знает, не что иное как спецсимвол перевода строки в Linux.
1. Сортировка
Теперь давайте выполним сортировку строк linux в нашем файле:
computer
data
debian
laptop
laptop
LAPTOP
mouse
RedHat
Вот несколько принципов, по которым команда sort linux сортирует строки:
- Строки с цифрами размещаются выше других строк
- Строки, начинающиеся с букв нижнего регистра размещаются выше
- Сортировка выполняется в соответствии алфавиту
- Строки сначала сортируются по алфавиту, а уже вторично по другим правилам.
2. Обратная сортировка
Отсортируем файл в обратном порядке:
RedHat
mouse
LAPTOP
laptop
laptop
debian
data
computer
3. Сортировка по колонке
Отсортируем вывод команды ls по девятой колонке, то есть по имени файла или папки. Колонку укажем опцией -k:
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:
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:
computer
data
debian
laptop
LAPTOP
mouse
RedHat
Теперь строчка laptop не повторяется.
6. Сортировка по нескольким полям
Мы можем сортировать данные по нескольким полям. Например, отсортируем вывод ls по второму первично и вторично девятому полях:
ls -l | sort -t «,» -nk2,5 -k9
drwxr-xr-x 2 seriyyy95 seriyyy95 4096 дек 6 14:32 Links
drwxr-xr-x 2 seriyyy95 seriyyy95 4096 янв 13 10:43 tmp
drwx—— 3 seriyyy95 seriyyy95 4096 янв 14 22:18 Desktop
drwxr-xr-x 3 seriyyy95 seriyyy95 4096 мар 28 2015 Журналы
drwx—— 4 seriyyy95 seriyyy95 12288 янв 15 15:42 Загрузки
Вот и все. Мы немного приоткрыли занавесу над возможностями сортировки строк linux с помощью команды sort. Если у вас остались вопросы — спрашивайте в комментариях!
Sort linux примеры
Команда sort сортирует содержимое файла в алфавитном или нумерологическом порядке. Если задать несколько файлов, то команда sort соединит их и, рассортировав, выдаст единым выводом. По умолчанию, объектом сортировки будут строки, однако опции позволяют выбирать объект сортировки: колонки, столбцы и прочие элементы форматирования файла. Разделителем между ними служат пробелы, однако соответствующие опции позволяют задать иные разделители.
Команда sort весьма древняя, она может служить образцом программирования утилит в ранних 70-х годах прошлого века. У команды множество опций, и их разнообразные сочетания, а также способы задания разделителей, хорошо развивают память и воображение.
Программа sort без опций
Я составил список своих должников и записал их в файл debts.txt:
Если мне придет в голову рассортировать должников по алфавиту, то я дам команду:
А могу и в обратном алфавиту порядке:
Параметры sort
Опции -n и -k
Приходится рассматривать эти две опции вместе, так как они позволяют сразу ввести читателя в курс дела, а не рассматривать множество простых примеров.
Опция -n используется всегда, когда нужно сортировать числа, разумеется в порядке возрастания (или убывания, добавив опцию -r).
Опция -k позволяет задавать объект сортировки: все эти столбцы, колонки, и тому подобные элементы форматирования файла.
Итак, я хочу выявить самых злостных должников по мере убывания долга:
Опция -n сообщает команде, что сортировать придется числа, опция -r , что в обратном порядке, а опция -k задает объект — вторую колонку текста.
У нас есть еще одна колонка с числами месяцев, можно для тренировки рассортировать список по числам разных месяцев, хотя никакого практического смысла это не имеет:
Видите, в пятой колонке числа идут по возрастающей. Древность программы сказывается еще и в том, что можно вводить опции по-разному. Например можно набрать:
с тем же результатом. И даже:
Должен предупредить, что существует два стиля задания объекта сортировки. (Имейте в виду, по-английски эти объекты называются fields, что обычно переводится как поля. Если видите в манах слова: fields или поля, знайте — речь идет о колонках, столбцах, или иных элементах форматирования текста). Но вернемся к стилям задания этих самых «полей».
Новый стиль использует опцию -k и цифры, указывающие порядковый номер нужной колонки с начала строки (начиная с 1).Возьмем файл pay.txt:
И дадим команду:
Сортировка произошла по первому символу второй колонки, что не дало нам никакой пользы. Изменим команду:
Указав пятый символ (считая точки) во второй колонке (-k2.5), мы получили алфавитный список сотрудников.
Теперь рассмотрим файл ivanov.txt:
Рассортируем его строго по второй колонке, не принимая во внимание колонку с инициалами:
Для этого мы применили опцию -k 2,2. Первая двойка означает начало объекта сортировки (колонки текста), а вторая двойка через запятую — конец объекта сортировки. То есть команде запрещено использовать для сортировки символы после последней буквы второй колонки.
Мы видим, что Ивановы идут в том же порядке, что и в исходном файле. А если мы хотим рассортировать Ивановых в алфавитном порядке их инициалов?
Мы приказали использовать для сортировки вторую и третью колонки текста (-k 2,3). Теперь Ивановы отсортированы и по инициалам. Но важнее знать, кто из Ивановых больше должен:
Теперь инициалы не сортируются, так как первичная сортировка проводится строго по второй колонке (-k 2,2), а вторичная сортировка (-k 4n) по 4 колонке, в нумерологическом порядке, и только среди Ивановых (то есть тех, кто не различался по результатам первичной сортировки). Теперь становится понятно, зачем нужна такая сортировка — строго по заданному объекту.
Надеюсь, что новый стиль написания опции -k стал понятен. Новый стиль применяется на всех современных версиях команды sort, включая GNU Coreutils, которыми укомплектованы все новые дистрибутивы Линукс.
Вкратце коснусь старого стиля написания опции -k. Вот пример задания третьего столбца для нумерологической сортировки:
- Новый стиль: sort -k 3,3n имя_файла
- Старый стиль: sort +2 -3n имя_файла
Старый стиль работает на новых версиях программы, но рассматривать его в подробностях я не стану, чтобы не запутаться самому и не запутать читателя. Нам хватит путаницы и с новым стилем.
Опция -r
Мы уже познакомились с ней. Она заставляет команду sort сортировать в обратном порядке. (От ‘z’ к ‘a’ и от 1000000 к 0).
Опция -M
Я не могу не остановится на одной удивительной способности команды sort — она может сортировать даже месяцы. Вернемся к файлу debts.txt:
Названия месяцев у нас в 4 колонке, поэтому пишем:
Вуаля! Мне это почему-то кажется чудом. Можно задать ту же команду и по-другому:
Опция М преобразует первые три непробельные символа указанного столбца в заглавные буквы (Скажем, SEP означает SEPtember), а затем сравнивает их и располагает в порядке годового круга.
До сих пор мы рассматривали файлы, в которых разделителем колонок или столбцов был пробел, что и установлено по умолчанию. Чтобы задать другой разделитель, необходимо использовать опцию -t.
Опция -t
Позволяет указать иной разделитель объектов сортировки вместо пробела. Вернемся к файлу pay.txt:
В первый раз, чтобы рассортировать должников по фамилиям, мы указывали пятую букву в третьем столбце (считая разделителем столбцов пробелы). Есть другой способ решить эту задачу:
Теперь мы задали разделителем точку и указали четвертую колонку.
Давайте рассортируем по алфавиту шеллы, доступные в системе, указав разделителем слэш (-t ‘/’):
В директории /etc масса файлов, в которых встречаются различные разделители. Часто это двоеточие:
Эта команда рассортирует файл /etc/passwd в порядке возрастания идентификационных номеров пользователей. Проделайте этот пример самостоятельно, у него длинный вывод, боюсь мой редактор будет не в восторге.
Надеюсь, с разделителями все ясно, правила их задания очень напоминают команду cut.
Опция -c
Эта опция проверяет порядок сортировки, сама ничего не сортируя. Создадим файл 123.txt:
Вывод «неправильный порядок: 1» сообщает нам номер строки с первой ошибкой.
Опция -u
Скрывает одинаковые объекты. Если в процессе сортировки выявилось несколько одинаковых объектов, то будет выведен только первый из них, остальные проигнорированы:
Остался только один Иванов из трех.
Если бы мы задали команду чуть по-другому:
то все Ивановы остались бы на своих местах. Ответьте: почему? (Ответ в приложении [1]).
Опция -b
Игнорирует пробелы в начале строк, и сортирует так, словно пробелов нет. Возьмем файл run.txt
Применим команду sort без опций:
Фактически произошла сортировка по количеству пробелов, так как пробел предшествует буквам в порядке сортировки. Введем команду:
Теперь строки отсортированы в алфавитном порядке, невзирая на пробелы.
Немного усложним файл run.txt
И попробуем выстроить животных по алфавиту:
Ничего не выходит — сортируется количество пробелов. Но стоит добавить опцию -b
как все становится на свои места.
Опция -d
Признает только буквы, цифры и пробелы и сортирует как в словаре.
Опция -i
Весьма похожа на предыдущую опцию -d, но не такая «строгая». Она признает только печатные символы, игнорируя все специальные.
Опция -f
При обычной сортировке, заглавные буквы идут прежде строчных:
А с опцией -f все равны:
Опция -g
Позволяет сортировать числа, записанные в общей математической форме. Возьмем файл notation.txt:
и попробуем рассортировать его обычной опцией -n:
и потерпим неудачу. Тогда применим опцию -g:
Теперь числа выстроились по ранжиру. Нужно сказать, что применять опцию -g следует в крайних случаях, когда нельзя обойтись опцией -n. Дело в том, что опция -g медленнее, и на больших файлах это становится заметным. Кроме того, в Интернете появляются сообщения, что в некоторых версиях GNU Coreutils sort замечены сбои в работе опции -g на больших файлах (Больше 25Мб).
Опция -T
Позволяет указать директорию для временных файлов, иную, чем положено по умолчанию (/tmp или $TMPDIR).
При сортировке больших файлов программа создает временные файлы, и можно указать, где их разместить. Примера по очевидным причинам дать не могу, просто помните про эту опцию, если случится сортировать многомегабайтные файлы.
Опция -S
Также пригодится для сортировки больших файлов. Она создаст в основной памяти буфер указанного размера.
Кстати, коли речь зашла о работе с большими файлами, то полезно бывает переместить эти процессы на задний план, чтобы можно было работать, не дожидаясь завершения процесса:
Опция -s
Эта опция отменяет пересортировку. Что это такое? — Допустим, мы сортировали некий файл по определенным, нужным нам объектам сортировки (полям, столбцам, колонкам, символам внутри колонок и так далее), применяли вторичную сортировку (как в примере sort -k 2,2 -k 4n ivanov.txt), но все объекты, выбранные нами, оказались одинаковыми (равными). В этом случае, по умолчанию, команда sort проводит пересортировку, считая объектом сортировки всю строку в целом (как в случае сортировки без опций). Если мы хотим сохранить первоначальный порядок строк файла, и не проводить финальную пересортировку, то мы применяем опцию -s.
Опция -z
Эта опция рассматривает исходный файл как набор строк, разделенных не знаком переноса строки, а нулевым байтом. Для чего это может понадобиться, я не знаю. Единственное, что мне удалось найти, это туманные указания, что эта опция может оказаться полезной в составе программных каналов (pipes) с такими командами как ‘perl -0’, ‘find -print0’, и ‘xargs -0’ для сортировки произвольных файловых имен. Я пока не разбирался с перечисленными программами и не могу ничего сказать по этому поводу. Я также пробовал подставлять опцию -z в многочисленные примеры из этой статьи, но никакой сортировки после добавления этой опции не происходило.
Опция -o
Видимо пережиток прошлого, когда не было перенаправления вывода. С помощью этой опции можно задать файл, куда будет помещен вывод команды вместо стандартного вывода на экран дисплея.
Послесловие
Оставшиеся опции варьируют в различных мануалах и руководствах, они достаточно понятны интуитивно, и не требуют специального рассмотрения. Если какой-то из опций нет в вашем мане, не беда, скорее всего опция поддерживается вашей версией программы. Попробуйте, чем вы рискуете? Но попадаются опции, не поддерживаемые GNU Coreutils sort, как например опции -R и —random-source=file, позволяющие «рассортировать» строки и прочие объекты в случайном порядке.
Другое дело сочетания различных опций друг с другом. Если вы соорудили заковыристое заклинание из множества разных опций, а оно не работает, попробуйте убрать ту или другую опцию, может быть поможет. А лучше идти от простого к сложному, постепенно усложняя команду, пока не достигнете нужного результата. Хорошо помогает набрать вашу команду в поисковой строке Гугла, вдруг повезет. Кстати, только этим способом я смог разобраться с некоторыми опциями, о которых пишу в этой статье.
Команда sort и кириллица
Команда sort работает с нашими буквами неадекватно.
Резюме команды sort
Чрезвычайно полезная и «мощная» команда. С ее помощью не проблема выявить в огромной директории файлы, которые вы вчера потеряли (по дате модификации), или собрать «в кучу» все линки, чтобы их проверить, и так далее. А в качестве фильтра в программных каналах (pipes), эта команда просто незаменима и позволяет творить чудеса.
Приложение
[1] Ответ на задачу про Ивановых.
В первом случае мы задали сортировку строго по второй колонке (-uk 2,2), поэтому программа видела всех Ивановых одинаковыми, и включила опцию -u.
Во втором случае мы задали сортировку, не указав конец объекта сортировки (-uk2), и программа сортировала Ивановых по следующим колонкам (могла бы до конца строки). В этом случае одинаковых объектов выявлено не было, и опция -u не включилась.