Команда Sort в Linux используется для сортировки содержимого текстовых файлов. Из этой статьи вы узнаете несколько основных примеров команды sort.
Команда sort упорядочивает текстовые строки полезными способами. Этот простой инструмент может помочь вам быстро отсортировать информацию из командной строки.
Синтаксис
sort [options] <filename>
Вы должны отметить несколько вещей:
Правила по умолчанию в команде sort
Это правила по умолчанию при использовании сортировки. Первые несколько примеров прояснят, как управляются эти приоритеты. Тогда мы рассмотрим специализированные варианты.
Позвольте нам показать вам несколько примеров команды sort, которые вы можете использовать в различных ситуациях.
Команда sort по умолчанию позволяет легко просматривать информацию в алфавитном порядке. Никаких опций не требуется, и даже для записей со смешанным регистром сортировка AZ работает должным образом
Мы собираемся использовать пример текстового файла с именем andreyex.txt, и если вы просмотрите содержимое файла , вы увидите следующее:
Linux
Debian
Mint
CentOS
Ubuntu
sort andreyex.txt
Вот отсортированный по алфавиту вывод:
CentOS Debian Linux Mint Ubuntu
Давайте возьмем тот же список, который мы использовали в предыдущем примере, и отсортируем по порядку номеров. Если вам интересно, список отражает одни из дистрибутивов Linux.
Мы изменили содержимое файла так, чтобы элементы были пронумерованы, но не в порядке, как показано ниже.
1. Debian
2. CentOS
3. Linux
4. Mint
5. Ubuntu
sort andreyex.txt
После сортировки результат:
1. Debian 2. CentOS 3. Linux 4. Mint 5. Ubuntu
Выглядит хорошо, правда? Вы можете полагаться на этот метод, чтобы точно расположить ваши данные? Возможно нет. Давайте посмотрим на другой пример, чтобы выяснить, почему.
Вот наш новый образец текста:
1
5
10
3
5
2
60
23
432
21
Теперь, если мы используем команду sort без каких-либо опций, то вот что мы получим:
sort orderвdigits.txt
1 10 2 21 23 3 432 5 5 60
При добавлении параметра -n, оценивается числовое значение строки, а не только первый символ. Теперь вы можете видеть, что наш список правильно отсортирован.
sort order.txt -n
Теперь у вас будет правильно отсортированный вывод:
1
2
3
5
5
10
21
23
60
432
Для этого мы снова будем использовать наш список дистрибутивов. Обратная функция не требует пояснений. Это изменит порядок содержимого вашего файла.
sort andreyex.txt -n
И здесь у вас есть выходной текст в обратном порядке:
5. Ubuntu 4. Mint 3. Linux 2. CentOS 1. Debian
Если вы случайно нажали клавишу Shift, при попытке выполнить функцию реверса, возможно, вы получили странные результаты. -R переставляет вывод в случайном порядке.
sort andreyex.txt -R
Вот случайно отсортированный вывод:
4. Mint 5. Ubuntu 1. Debian 3. Linux 2. CentOS
Сортировка также имеет встроенную функциональность, чтобы организовать по месяцам. Он распознает несколько форматов, основанных на информации о конкретной локали. Мы попытаемся продемонстрировать несколько несоответствующих тестов, чтобы показать, что это будет организовано по дате, а не по году. Сокращения месяца отображаются перед полными именами.
Вот пример текстового файла в этом примере:
Mar
March
February
Apr
April
August
July
June
November
September
1
4
3
6
01/03/19
01/08/19
02/09/18
Давайте разберем по месяцам, используя опцию -M:
sort filename.txt -M
Вот результат, который вы увидите:
01/03/19 01/08/19 02/09/18 1 3 4 6 Jan February Mar March Apr April May June July August September October November December
Как мы упоминали ранее, сортировка не изменяет исходный файл по умолчанию. Если вам нужно сохранить отсортированный контент, это можно сделать.
Для этого примера мы создали новый файл, в котором хотим, чтобы отсортированная информация была напечатана и сохранена с именем andreyex_sorted.txt.
Внимание: если вы попытаетесь перенаправить отсортированные данные в один и тот же файл, он сотрет содержимое вашего файла.
sort filename.txt -n> andreyex_sorted.txt
Если вы используете команду cat в выходном файле, это будет его содержимое:
1. Debian 2. CentOS 3. Linux 4. Mint 5. Ubuntu
Если в вашем файле есть таблица, вы можете использовать опцию -k, чтобы указать, какой столбец сортировать. Мы добавили несколько произвольных чисел в качестве третьего столбца и будем отображать выходные данные, отсортированные по каждому столбцу. Мы включили несколько примеров, чтобы показать разнообразие возможных результатов. Опции добавляются после номера столбца.
1. Debian 300
2. CentOS 200
3. Linux 100
4. Mint 400
5. Ubuntu 500
sort filename.txt -k 2
Это позволит отсортировать текст во втором столбце в алфавитном порядке:
2. CentOS 200 1. Debian 300 3. Linux 100 4. Mint 400 5. Ubuntu 500
sort andreyex.txt -k 3n
Это позволит отсортировать текст по цифрам в третьем столбце.
3. Linux 100
2. CentOS 200
1. Debian 300
4. Mint 400
5. Ubuntu 500
sort andreyex.txt -k 3nr
То же, что и вышеупомянутая команда, только что порядок сортировки был обратным.
5. Ubuntu 500 4. Mint 400 1. Debian 300 2. CentOS 200 3. Linux 100
Если у вас есть файл с потенциальными дубликатами, опция -u значительно облегчит вашу жизнь. Помните, что сортировка не будет вносить изменения в исходный файл данных. Мы решили создать новый файл только с элементами, которые являются дубликатами. Ниже вы увидите входные данные, а затем содержимое каждого файла после выполнения команды.
1. Debian
2. CentOS
3. Linux
4. Mint
5. Ubuntu
2. CentOS
3. Linux
4. Mint
1. Debian
3. Linux
5. Ubuntu
sort andreyex.txt -u> andreyex_duplicates.txt
Вот выходные файлы отсортированы и без дубликатов.
1. Debian 2. CentOS 3. Linux 4. Mint 5. Ubuntu
Многие современные дистрибутивы, работающие с sort, по умолчанию реализуют игнорирование регистра. Если это не так, добавление опции -f даст ожидаемые результаты.
sort andreyex.txt -f
Вот вывод, где случаи игнорируются командой sort:
linux lINux LinUX UBuntu ubuntu Ubuntu uBUntu UBUNTU
Эта опция позволяет сравнивать буквенно-цифровые значения, такие как 2k (то есть 2000).
sort andreyex.txt -f
Вот отсортированный вывод:
20.0 200 2000.0 2k
Мы надеемся, что эта статья помогла вам получить базовое использование команды sort в Linux. Если у вас есть какой-нибудь классный трюк, почему бы не поделиться им с нами в разделе комментариев?
Можно ли с помощью этой команды отсортировать выход другой через | ?
Да
Как результат сортировки записать в тот же файл, который до этого не был отсортирован? Т.е. без промежуточного файла.