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

click fraud protection

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

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

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

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

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

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

Чтобы отсортировать строки в файле Linux с разделителями, используйте сортировку команда нравится:

сортировать -k2 table1.txt

Эта команда сортирует файл

table1.txt в соответствии с символами, начиная со второго столбца (k2 относится ко второму столбцу). Предполагая, что содержимое входного файла:

1, Джастин, Тимберлейк, титул 545, цена 7,30 доллара.
2, Taylor, Swift, Title 723, цена 7,90 долл. США.
3, Мик, Джаггер, Title 610, цена 7,90 долл. США
4, Lady, Gaga, Title 118, цена 7,30 доллара.
5, Johnny, Cash, титул 482, цена 6,50 доллара.
6, Элвис, Пресли, титул 335, цена 7,30 доллара.
7, Джон, Леннон, тайтл 271, цена 7,90 долл. США.
8, Майкл, Джексон, Title 373, цена 5,50 доллара.

Поскольку второй столбец в этом примере содержит имена, отсортированный вывод упорядочивается по первой букве имени каждого человека во втором столбце, как показано ниже:

6, Элвис, Пресли, титул 335, цена 7,30 доллара.
7, Джон, Леннон, тайтл 271, цена 7,90 долл. США.
5, Johnny, Cash, титул 482, цена 6,50 доллара.
1, Джастин, Тимберлейк, титул 545, цена 7,30 доллара.
4, Lady, Gaga, Title 118, цена 7,30 доллара.
8, Майкл, Джексон, Title 373, цена 5,50 доллара.
3, Мик, Джаггер, Title 610, цена 7,90 долл. США
2, Taylor, Swift, Title 723, цена 7,90 долл. США.

Если вы отсортируете файл с -k3 (используя содержимое строки, начиная с столбца 3, столбец Фамилия), вывод будет:

5, Johnny, Cash, титул 482, цена 6,50 доллара.
4, Lady, Gaga, Title 118, цена 7,30 доллара.
8, Майкл, Джексон, Title 373, цена 5,50 доллара.
3, Мик, Джаггер, Title 610, цена 7,90 долл. США
7, Джон, Леннон, тайтл 271, цена 7,90 долл. США.
6, Элвис, Пресли, титул 335, цена 7,30 доллара.
2, Taylor, Swift, Title 723, цена 7,90 долл. США.
1, Джастин, Тимберлейк, титул 545, цена 7,30 доллара.

а также -k5 выводит список, отсортированный по цене:

4, Lady, Gaga, Title 118, цена 7,30 доллара.
7, Джон, Леннон, тайтл 271, цена 7,90 долл. США.
6, Элвис, Пресли, титул 335, цена 7,30 доллара.
8, Майкл, Джексон, Title 373, цена 5,50 доллара.
5, Johnny, Cash, титул 482, цена 6,50 доллара.
1, Джастин, Тимберлейк, титул 545, цена 7,30 доллара.
3, Мик, Джаггер, Title 610, цена 7,90 долл. США
2, Taylor, Swift, Title 723, цена 7,90 долл. США.

Подождите, это не сработало, не так ли? Вместо сортировки по цене команда отсортировала список по номеру заголовка. Почему? Ну, если ему не указан разделитель, по которому каждая строка должна разбиваться на столбцы, он использует пробелы. Поскольку в середине каждой записи заголовка есть пробел, четвертый столбец в каждой записи становится словом «Заголовок», а пятый столбец становится номером заголовка.

Используйте флаг -t, чтобы указать разделитель для сортировки. Это контролирует, где именно команда разделяет столбцы.

сортировать -t, -k5 table1.txt

Это дает желаемый результат:

8, Майкл, Джексон, Title 373, цена 5,50 доллара.
5, Johnny, Cash, титул 482, цена 6,50 доллара.
1, Джастин, Тимберлейк, титул 545, цена 7,30 доллара.
4, Lady, Gaga, Title 118, цена 7,30 доллара.
6, Элвис, Пресли, титул 335, цена 7,30 доллара.
2, Taylor, Swift, Title 723, цена 7,90 долл. США.
3, Мик, Джаггер, Title 610, цена 7,90 долл. США
7, Джон, Леннон, тайтл 271, цена 7,90 долл. США.

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

Отменить сортировку

В опция отменяет сортировку. Например, используя результаты выше:

сортировать -r -t, -k5 table1.txt

дает:

7, Джон, Леннон, тайтл 271, цена 7,90 долл. США.
3, Мик, Джаггер, Title 610, цена 7,90 долл. США
2, Taylor, Swift, Title 723, цена 7,90 долл. США.
6, Элвис, Пресли, титул 335, цена 7,30 доллара.
4, Lady, Gaga, Title 118, цена 7,30 доллара.
1, Джастин, Тимберлейк, титул 545, цена 7,30 доллара.
5, Johnny, Cash, титул 482, цена 6,50 доллара.
8, Майкл, Джексон, Title 373, цена 5,50 доллара.

Сохранить отсортированный файл

Сортировка файла не сохраняет его. Чтобы сохранить отсортированный список в файл, используйте оператор перенаправления:

sort -k6 table1.txt> test_new.txt

куда test_new.txt это новый файл.

Сортировка выходного потока

Вы также можете применить команду сортировки к выходным данным потока, например, оператор конвейера:

ls -n | сортировать -t, -k5

Это сортирует вывод списка файлов, созданного ls команда по размеру файла, начиная с самых больших файлов. В -n Оператор задает числовую сортировку, а не буквенную.