Примеры использования утилиты sort

sort - UNIX‐ утилита, сортирует содержимое указанных файлов, с учётом установленной в среде переменных локализации.

Утилиту sort можно использовать для сортировки текста из одного или нескольких файлов или c помощью нее может быть выполнена сортировка вывода linux для какой-либо команды, например использования утилиты sort для обнаружения DoS-атак.

Параметры запуска:

  • -b, –ignore-leading-blanks игнорировать начальные пропуски
  • -d, –dictionary-order рассматривать только пропуски, буквы и цифры
  • -f, –ignore-case игнорировать регистр букв
  • -i, –ignore-nonprinting рассматривать только печатные знаки
  • -n, –numeric-sort сравнивать численные значения строк
  • -h, –human-numeric-sort сравнивать численные значения с учетом сокращения степени (2K, 1G)
  • -r, –reverse обратить результаты сравнения; обратный порядок
  • -u, –unique с -c, проверять порядок строго; без -c, выводить только первое среди нескольких равных
  • -c, –check проверять, сортированы ли входные файлы; не сортировать
  • -k, –key=Поз1[,Поз2] начинать ключ в Поз1 и завершать на Поз2 (отсчет от 1)
  • -o, –output=ФАЙЛ выводить в ФАЙЛ, а не на стандартный вывод
  • -t, –field-separator=РАЗДЕЛИТЕЛЬ использовать при поиске ключевых полей РАЗДЕЛИТЕЛЬ, а не переход от непробельных знаков к пробельным
  1. Строки с цифрами размещаются выше других строк
  2. Строки, начинающиеся с букв нижнего регистра размещаются выше
  3. Сортировка выполняется в соответствии алфавиту
  4. Строки сначала сортируются по алфавиту, а уже вторично по другим правилам.

Прямая сортировка файл, по принципам описанным выше, происходит по умолчанию. Просто вызовите команду sort и укажите нужный файл. Например, мы хотим отсортировать по алфавиту файл служб Linux (/etc/services), который хранит информацию о многочисленных службах, которые клиентские приложения могут использовать на компьютере. Внутри файла services находятся имя службы, номер порта и протокол, который он использует, и любые применимые псевдонимы.

$ sort /etc/services
 
acr-nema        104/tcp         dicom           # Digital Imag. & Comm. 300
afbackup        2988/tcp                        # Afbackup system
afbackup        2988/udp
afmbackup       2989/tcp                        # Afmbackup system
afmbackup       2989/udp
afpovertcp      548/tcp                         # AFP over TCP
afs3-bos        7007/tcp                        # basic overseer process
afs3-bos        7007/udp
afs3-callback   7001/tcp                        # callbacks to cache managers
...

Для обратной сортировки используйте ключ r, команда будет выглядеть так:

$ sort -r /etc/services

В этом примере мне нужно вывести все лог файлы и отсортировать их по колонке с названием месяца. Колонка указывается опцией -k, номер колонки для вывода команды ls седьмой. Итого получим такую команду для запуска:

$

ls -l /var/log/ | sort -k7
...
drwxr-xr-x  2 root        root                4096 Sep  5  2019 openvpn
-rw-r-----  1 root        adm                14721 Mar  6 18:47 vsftpd.log.2
-rw-------  1 root        root               10723 Mar  6 23:53 dovecot.log.2.gz
-rw-r-----  1 root        adm               281146 Mar  6 23:59 fail2ban.log.2.gz
-rw-r-----  1 syslog      adm              1190971 Mar  7 00:00 auth.log.2.gz

Для сортировки по числовому значению используется опция -n:

$ ls -l /var/log/ | sort -nk6

Мы можем сортировать данные по нескольким полям, например, отсортируем вывод ls по второму первично и вторично девятому полях:

$ ls -l /var/log/ | sort -t "," -nk2,5 -k9

Команда sort Linux позволяет не только сортировать строки, но и удалять дубликаты, для этого есть опция -u.

 $ sort -u yourfile.txt

Или такой вариант

$ cat old.txt | sort | uniq > new.txt
PQ VPS сервера в 28+ странах.