Linux

Использование команды сортировки Linux

Бизнес-аналитик работает на ноутбуке

Данные в текстовом файле Linux могут быть отсортированы с помощью команды сортировки, если каждый элемент каким-либо образом разделен. Часто запятая используется в качестве разделителя для информации с разделителями.

Бизнес-аналитик работает на ноутбуке
Дэвид Лис / Iconica / Getty Images

Основные правила сортировки

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

Сортировать текстовый файл

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 долл. США
Похожие посты
Linux

8 лучших окружений рабочего стола Linux

AndroidIphone и ipadLinuxWindows

Окончательное руководство по включению темного режима везде

LinuxКак сделать

Что такое Swappiness в Linux? (и как это изменить)

LinuxКак сделать

Как использовать команду ls для вывода списка файлов и каталогов в Linux