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

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 в нашем файле:

computer
data
debian
laptop
laptop
LAPTOP
mouse
RedHat

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

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

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

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

Читайте также:  Загрузчик для kali linux

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 по второму первично и вторично девятому полях:

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. Если у вас остались вопросы — спрашивайте в комментариях!

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Похожие записи

Оцените статью

Об авторе

Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

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

У вас в конце списка опций sort указана -f, а описание для неё взято от опции -t. Очепятка, однако 🙂 Ответить

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

Читайте также:  Huawei for linux mint

Добрый день! Точный ответ на Ваш вопрос даст 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 Ответить

Источник

Команда sort в Linux

sort – простая и очень полезная команда, которая меняет порядок строк в текстовом файле, то есть осуществляет их сортировку по алфавиту или в соответствии с числовыми значениями. По умолчанию правила сортировки следующие:

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

Правила сортировки можно изменять при помощи опций. Мы рассмотрим их ниже.

Синтаксис

Основной синтаксис команды следующий

Команда также может быть использована в составе конвейеров (пайпов). Например

Опции

У команды множество опций, вот наиболее важные и распространенные из них:
-b, —ignore-leading-blanks игнорировать пробелы в начале
-d, —dictionary-order рассматривать только пробелы, буквы и цифры
-g, —general-numeric-sort сравнивать в соответствии с числовыми значениями (строки преобразуются в числовой формат)
-i, —ignore-nonprinting не учитывать непечатаемые символы
-M, —month-sort сравнивать по месяцам в соответствии со следующим правилом [Любое неизвестное значение] < `JAN’ < … < `DEC’.
-h, —human-numeric-sort сравнивать числа, записанные в читаемом человеком формате (например, «2K», «1G»).
-n, —numeric-sort сравнивать числовые значения строк без преобразования в числовой формат
-R, —random-sort случайная сортировка
-r, —reverse вывод результатов в обратном порядке -o ФАЙЛ вывод результатов в указанный файл -k ПОЛЕ1, [ПОЛЕ2, ПОЛЕ3…] – сортировка по полям в заданном порядке
-u, —unique – удалять дублирующие записи в результатах сортировки
-c – проверка сортировки

Сортировка по алфавиту

Создадим файл data.txt со следующими строками: «апельсины яблоки бананы груши сливы».

echo -e "апельсины\nяблоки\nбананы\nгруши\nсливы" > data.txt

Здесь мы использовали обычную функцию перенаправления вывода команды echo в файл. Посмотрим файл с помощью команды cat.

Как видим, сейчас строки выводятся в том же порядке как и были записаны. Для его сортировки в алфавитном порядке выполните команду:

Вы получите следующий результат:

Читайте также:  Версия linux через командную строку

Как видим сейчас строки отсортированы в алфавитном порядке.

Вывод результатов в файл

Команда sort не изменяет исходный файл, а просто выводит его содержимое в отсортированном виде. Чтобы сохранить результаты сортировки, воспользуйтесь опцией -o или перенаправлением вывода:

sort -o output.txt data.txt sort data.txt > output.txt

Вывод результатов в обратном порядке

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

sort -r data.txt > output.txt cat output.txt

Сортировка по заданным полям

Для сортировки по определенным полям используется опция –k. Она указывается в следующем формате:

Где ПОЛЕ1 и т.д. – номер поля (столбца), по которому осуществляется сортировка. Для примера создадим новый файл prices.txt со следующим содержимым:

апельсины 80 бананы 60 груши 150 сливы 200 яблоки 50

Для его сортировки по второму столбцу можно выполнить следующую команду:

Результат будет следующим

На первый взгляд кажется что команда сработала неправильно. Действительно, кажется что в самом верху должны стоять сливы, а яблоки нижней строкой, да и апельсины дороже банан. Но на самом деле команда sort воспринимает цифры не как число, а как строку, т.е сортировка происходит по первой цифре. Вот тогда все встает на свои места команда вывела последовательность не числовую сортировку «200-150-80-60-50» а строковую «1-2-5-6-8».

Опцию -k можно задавать в более сложном виде. Каждое поле задается в виде X.Y, где X – номер поля, а Y – начальная позиция поля, с которой начинается сортировка. Для примера создадим файл employee.txt со следующим содержимым:

01 Василий ст.программист 02 Иван мл.программист 03 Сергей ст.менеджер 04 Александр мл.менеджер

Если просто указать номер поля, результат сортировки будет следующим:

Значение начальной позиции сортировки 4 заставит команду игнорировать первые 3 буквы и начнет сортировку с 4-й, т.е после «ст.» и «мл.»

Удаление дублирующих записей

Опция -u удаляет из результатов дублирующие записи и выводит только уникальные поля. Допустим, у нас есть файл cars.txt со следующими данными:

Mercedes Honda Mitsubishi Lexus Audi BMW Audi Lexus Lexus

Выведет следующий результат:

Проверка сортировки

Опция -с позволяет проверить, отсортированы ли данные в файле. Если выполнение команды с этой опцией не возвращает никакого результата, значит, строки файла уже упорядочены. Иначе будут выведены строки, нарушающие порядок сортировки. Допустим, файл cars2.txt содержит следующие данные:

Для проверки выполним следующую команду:

sort: cars2.txt:3: неправильный порядок: BMW

Мы видим, что строка «BMW» нарушает порядок сортировки:

Заключение

Команда sort – простой, но очень мощный и полезный при работе с данными инструмент. У нее есть множество разнообразных опций, помимо уже рассмотренных, которые можно узнать на соответствующей man-странице. Кроме того, ее можно использовать совместно с командами find и join для поиска по большому количеству файлов или объединения результатов.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Похожие записи:

Источник

Оцените статью
Adblock
detector