sort — сортировка строк
Команда sort упорядочивает строки файла или вывода: как текст, как числа (-n), по колонке (-k), по убыванию (-r).
Шпаргалка
8 команд Версия для печати-
sort file.txtпо алфавиту -
sort -n nums.txtкак числа: 2 9 10 100 -
sort -rn nums.txtчисла по убыванию -
sort -k2,2 table.txtпо второй колонке -
sort -t: -k3,3n /etc/passwdразделитель «:», 3-я колонка -
sort -u names.txtотсортировать и убрать дубли -
du -sh /var/log/* | sort -hразмеры 4K 512M 1G -
sort | uniq -c | sort -rnчастота строк, сверху частые
Обзор
sort читает все строки, упорядочивает их и печатает. Исходный файл не меняется.
Без ключей строки сравниваются как текст, символ за символом. Поэтому числа без
-n встают «по первой цифре»:
Колонка для sort — кусок строки между разделителями. По умолчанию колонки
разделяют пробелы и табуляции, свой разделитель задаёт -t. Ключ -k2,2 значит
«сравнивать с колонки 2 по колонку 2». Если написать только -k2, сравнение пойдёт
от второй колонки до конца строки.
В конвейере sort обычно стоит перед uniq: тот убирает только
соседние повторы, а после сортировки одинаковые строки как раз оказываются рядом.
Ключи
11Буквы порядка можно прицепить к колонке: -k3,3n — третья колонка как число,
-k2,2r — вторая по убыванию. Полный список — man sort.
| Ключ | Что делает | Пример |
|---|---|---|
-n --numeric-sort |
Сравнивать как числа, а не как текст. | sort -n nums.txt |
-r --reverse |
Обратный порядок — от большего к меньшему. | sort -rn nums.txt |
-k --key N[,M] |
Сравнивать по колонкам с N по M; без M — от N до конца строки. | sort -k2,2 table.txt |
-t --field-separator C |
Разделитель колонок вместо пробелов, например «:» или «,». | sort -t: -k3,3n /etc/passwd |
-u --unique |
Оставить по одной строке из одинаковых. | sort -u names.txt |
-h --human-numeric-sort |
Сравнивать размеры с суффиксами K, M, G. | du -sh * | sort -h |
-o --output FILE |
Записать результат в файл; можно в тот же, что читается. | sort -o names.txt names.txt |
-f --ignore-case |
Не различать заглавные и строчные буквы. | sort -f names.txt |
-b --ignore-leading-blanks |
Не учитывать пробелы в начале колонки. | sort -b -k2,2 table.txt |
-V --version-sort |
Сортировать номера версий: 1.2 < 1.9 < 1.10. | sort -V versions.txt |
-c --check |
Проверить, отсортирован ли ввод; печатает первую строку не по порядку. | sort -c list.txt |
Ничего не найдено. Попробуй запрос короче.
Рецепты
7Таблица по числовой колонке
Размеры с буквами K, M, G
-n прочитает 512M как 512, а 1G как 1 — порядок выйдет неверный. -h
понимает суффиксы.
Несколько ключей
Версии и имена файлов с номерами
Записать результат в тот же файл
sort names.txt > names.txt оставит пустой файл, а -o пишет только после чтения.
Проверить, отсортирован ли файл
Неполадки
710 стоит раньше 9
Сравнение идёт как текст. Для чисел нужен -n, для размеров с суффиксами — -h.
sort -k2 сортирует не только по второй колонке
-k2 значит «с колонки 2 до конца строки», поэтому при равных значениях решают
следующие колонки. Ограничь ключ: -k2,2.
Порядок заглавных и строчных не тот, что ждал
Порядок текста задаёт локаль. В локали C заглавные идут раньше всех
строчных, в en_US.UTF-8 регистр почти не учитывается. Одинаковый результат на
любой машине — LC_ALL=C sort. Регистр не различать — -f.
sort: cannot read: x: No such file or directory
Файла нет по этому пути. Проверь имя через ls и текущий каталог через pwd.
sort: invalid number at field start
После -k должен идти номер колонки: -k2, -k2,2n. Буквы без номера (-k n)
sort не принимает. Колонки считаются с единицы: -k0 — ошибка
field number is zero.
Числа с пробелами в начале сортируются странно
Без -n и -b ведущие пробелы входят в сравнение. Добавь -b или сравнивай
числом -n.
После sort file > file файл пуст
Оболочка обнулила файл для записи раньше, чем sort его прочитал. Используй
sort -o file file — см. перенаправление вывода.
См. также
- uniq — посчитать и убрать повторы после сортировки.
- cut — вырезать колонку перед сортировкой.
- wc — посчитать строки результата.
- head — оставить верх отсортированного списка.
- redirection — конвейер
|и запись результата в файл. - text-tools — tr, paste, column, comm и другие звенья конвейера.
Есть неточность? Сообщить об ошибке в статье