COREUTILS. Команда sort. Сортировка вывода программ
Скорее всего пакет coreutils у вас уже установлен, хотя бы потому, что удалить его нельзя, но на всякий случай проверьте:
dpkg -l | grep coreutils #для debian-based дистрибутивов
Если в первой колонке вывода будет стоять буква "i", означающая installed, значит все в порядке.
Пользоваться утилитой sort для сортировки вывода программ предельно просто. Для этого достаточно просто перенаправить вывод какой-либо программы на поток ввода sort:
ls | sort -d
Данная конструкция сначала вызовет команду ls, которая считает содержимое каталога, а затем передаст результат команде sort, которая отсортирует его по алфавиту (ключ -d указывает использовать алфавит в качестве шаблона).
Другой пример использования команды sort в linux - это сортировка содержимого файла. Отсортируем, например, строки, содержащиеся в файле /etc/passwd, с целью получения имен пользователей по алфавиту:
sort -d /etc/passwd
Но что делать, если вы хотите, используя тот же файл, отсортировать строки уже не по имени пользователя, а, например, по их уникальному идентификатору (UID)? Утилита sort умеет работать и с таблицами - сортировать по столбцу. Вернее изначально, sort как раз и работает с таблицами, вот только в качестве разделителя она по-умолчанию использует пробел и знак табуляции для разделения столбцов, знак переноса строки для разделения строк. Так как файл /etc/passwd использует ":" для разделения столбцов, то этот символ нужно передать sort при помощи ключа "-t" явно, а далее просто указать номер столбца с помощью ключа "-k". Но только ничего не получится, если опять же не указать шаблон. В данном случае нам понадобиться сортировать числа - поэтому вместо "-d" (по алфавиту) стаим -n (по числам). Вот, что получилось:
sort -n -t : -k 2,2 /etc/passwd
Внимательный читатель спросит: "Почему в качестве параметра ключа "-k" мы указали не просто номер столбца, а номер столбца через запятую с его же номером?". Ответ прост. Ключ "-k" очень мощный. Он позволяет гибко выбирать сортируемое поле. Используя предыдущий пример, немного изменим параметры ключа "-k":
sort -n -t : -k 2.2,2.4 /etc/passwd
Добавив точку, мы тем самым сузили диапазон для проведения сортировки. Теперь команда расшифровывается так: отсортируй содержимое файл /etc/passwd, приняв в качестве исходных данных символ со второго по четвертый во 2-ом столбце.
Приведем еще один классный пример. Представим, что у нас закончилось место в разделе /home, и мы хотим узнать 10 самых объемных каталогов и файлов внутри /home с целью понять, куда копать:
du -a /home | sort -n | tail
Сначала командой du мы проходимся по всем файлам и подкаталогам /home, затем сортируем полученные строки по возрастанию и, наконец, tail'ом отображаем последние 10
На этом возможности команды soft не исчерпываются. Полезным может оказаться ключ "-r", позволяющий сортировать строки в обратном порядке. Его не стоит путать с ключом "-R", который совершенно случайным образом сортирует содержимое файла или вывода программы. Должно быть такая функция тоже кому-то будет полезной.
Также стоит обратить ваше внимание на ключ "-u", который заставляет sort выводит только уникальные значения. Т.е., если при сортировке выяснится, что сортируемые значения одинаковы, будет выведено только то, которое первым попало в поле зрения sort. Ключ "-u" не работает для значений, например "1" и " 1" (один и пробел один), так как пробел тоже считается символом. Чтобы этого избежать применяют ключ "-b", позволяющий игнорировать пробелы перед сортируемой строкой.