Данные в текстовом файле Linux могут быть отсортированы с помощью команды сортировки, если каждый элемент каким-либо образом разделен. Часто запятая используется в качестве разделителя для информации с разделителями.
Основные правила сортировки
Команда sort переставляет строки в текстовом файле для сортировки строк по номерам и алфавиту. Правила по умолчанию для команды сортировки:
- Текст, начинающийся с цифры, появляется перед текстом, начинающимся с буквы; младшие числа сортируют первыми.
- Текст, который начинается с буквы, которая появляется в алфавите раньше, чем первая буква других текстовых записей, сортируется перед текстом, который начинается с буквы, которая появляется позже в алфавите.
- Когда текст начинается с прописных и строчных букв одной и той же буквы, строчный экземпляр сортируется первым.
Сортировать текстовый файл
Для сортировки строк в файл с разделителями Linux, используйте сортировки команду , как это:
sort -k2 table1.txt
Эта команда сортирует файл table1.txt по символам, начинающимся со второго столбца ( k2 относится ко второму столбцу). Предполагая, что содержимое входного файла:
1, Джастин, Тимберлейк, Название 545, Цена 7,30 $
2, Тейлор, Свифт, Название 723, Цена 7,90 $
3, Мик, Джаггер, Название 610, Цена 7,90 $
4, Леди Гага, Название 118, Цена 7,30 $
, Джонни, Наличные, Титул 482, Цена 6,50 долл. США
6, Элвис, Пресли, Титул 335, Цена 7,30 долл. США
7, Джон Леннон, Титул 271, Цена 7,90 долл. США
8, Майкл Джексон, Титул 373, Цена 5,50 долл. США
Поскольку второй столбец в этом примере содержит первые имена, отсортированный вывод упорядочен по первой букве имени каждого человека во втором столбце, как показано ниже:
6, Элвис, Пресли, Титул 335, Цена 7,30 долл. США
7, Джон Леннон, Титул 271, Цена 7,90 долл. США
5, Джонни Кэш, Титул 482, Цена 6,50 долл. США
1, Джастин Тимберлейк, Титул 545, Цена 7,30 долл. США
4, Леди Гага, Титул 118, Цена 7,30 долл. США
8, Майкл Джексон, Титул 373, Цена 5,50 долл. США
3, Мик, Джаггер, Титул 610, Цена 7,90 долл. США
2, Тейлор Свифт, Титул 723, Цена 7,90 долл. США
Если вы сортируете файл с -k3 (используя содержимое строки, начинающееся со столбца 3 , столбца Фамилия), вы получите :
5, Джонни, Кэш, Титул 482, Цена 6,50 долл.
4, Леди, Гага, Титул 118, Цена 7,30 долл. США
8, Майкл Джексон, Титул 373, Цена 5,50 долл.
3, Мик, Джаггер, Титул 610, Цена 7,90 долл.
7, Джон Леннон, Титул 271, Цена 7,90 долл. США
6, Элвис, Пресли, Титул 335, Цена 7,30 долл. США
2, Тейлор Свифт, Титул 723, Цена 7,90 долл. США
1, Джастин Тимберлейк, Титул 545, Цена 7,30 долл. США
и -k5 создает список, отсортированный по цене:
4, Леди, Гага, Титул 118, Цена 7,30 долл. США
7, Джон, Леннон, Титул 271, Цена 7,90 долл. США
6, Элвис, Пресли, Титул 335, Цена 7,30 долл. США
8, Майкл Джексон, Титул 373, Цена 5,50 долл. США
5, Джонни, Наличные, Титул 482, Цена 6,50 долл. США
1, Джастин Тимберлейк, Титул 545, Цена 7,30 долл. США
3, Мик, Джаггер, Титул 610, Цена 7,90 долл. США
2, Тейлор Свифт, Титул 723, Цена 7,90 долл. США
Подождите, это не сработало, не так ли? Вместо сортировки по цене команда отсортировала список по номеру заголовка. Почему? Ну, если ему не дан разделитель, в котором он должен разбивать каждую строку на столбцы, он использует пробелы. Поскольку в середине каждой записи заголовка есть пробел, столбец четыре в каждой записи становится словом «Заголовок», а столбец пять становится номером заголовка.
Используйте флаг -t, чтобы указать разделитель для сортировки. Это контролирует, где именно команда отделяет столбцы.
sort -t, -k5 table1.txt
Это дает желаемый результат:
8, Майкл, Джексон, Название 373, Цена 5,50 $
, Джонни, Кэш, Название 482, Цена 6,50 $
1, Джастин Тимберлейк, Название 545, Цена 7,30 $
4, Леди Гага, Название 118, Цена 7,30 $
6, Элвис, Пресли, Титул 335, Цена 7,30 долл. США
2, Тейлор, Свифт, Титул 723, Цена 7,90 долл. США
3, Мик, Джаггер, Титул 610, Цена 7,90 долл. США
7, Джон Леннон, Титул 271, Цена 7,90 долл. США
Обычно вы хотите указать разделитель. Это предотвращает нежелательную путаницу и неточные результаты. Это особенно верно для больших файлов, которые не всегда могут быть явно неправильными.
Отменить сортировку
Опция -r переворачивает сортировку. Например, используя результаты выше:
sort -r -t, -k5 table1.txt
выходы:
7, Джон, Леннон, Название 271, Цена 7,90 $
3, Мик, Джаггер, Название 610, Цена 7,90 $
2, Тейлор Свифт, Название 723, Цена 7,90 $
6, Элвис, Пресли, Название 335, Цена 7,30 $
4, Леди Гага, Титул 118, Цена 7,30 долл. США
1, Джастин Тимберлейк, Титул 545, Цена 7,30 долл. США
5, Джонни Кэш, Титул 482, Цена 6,50 долл. США
8, Майкл Джексон, Титул 373, Цена 5,50 долл. США
Сохранить отсортированный файл
Сортировка файла не сохраняет его. Чтобы сохранить отсортированный список в файле, используйте оператор перенаправления:
sort -k6 table1.txt> test_new.txt
где test_new.txt — новый файл.
Сортировать поток вывода
Вы также можете применить команду сортировки к выводу потока, например, к оператору канала:
ls -n | сортировать -t, -k5
Это сортирует вывод списка файлов, сгенерированного командой ls, по размеру файла, начиная с самых больших файлов. Оператор -n определяет числовую сортировку, а не алфавитную.