1. Команда sort
Команда sort предназначена для сортировки строк в текстовом файле. Она работает с любым форматом текста: от обычного плоского текста до CSV. По умолчанию она сортирует строки в алфавитном порядке. Однако, есть куча опций, которые позволят вам творить настоящие чудеса.
Основной синтаксис
sort [опции] файл
Простой пример
Допустим, у нас есть файл names.txt с таким содержимым:
Charlie
Alice
Bob
David
Мы можем отсортировать его по алфавиту так:
sort names.txt
Результат:
Alice
Bob
Charlie
David
Ключевые опции sort
Сортировка в обратном порядке
Если вы хотите отсортировать строки в убывающем порядке, используйте опцию -r:
sort -r names.txt
Результат:
David
Charlie
Bob
Alice
Числовая сортировка
Для чисел алфавитная сортировка может работать некорректно. Например, вот содержимое файла numbers.txt:
10
2
5
1
Алфавитная сортировка выдаст:
1
10
2
5
Но с опцией -n (числовая сортировка):
sort -n numbers.txt
Результат будет корректным:
1
2
5
10
Устойчивость к пробелам
Иногда строки содержат пробелы в начале или конце. Чтобы sort не путался, используйте опцию -b:
sort -b грязный_файл.txt
Пример
Предположим, у нас есть журнал посещений веб-сайта visits.log:
user2 15
user1 5
user3 30
user4 20
Мы хотим отсортировать пользователей по количеству посещений (второй столбец). Это делается так:
sort -k2 -n visits.log
Где -k2 означает "использовать второй столбец для сортировки". Результат:
user1 5
user2 15
user4 20
user3 30
2. Команда uniq
Команда uniq убирает повторяющиеся строки в файле. Однако важно помнить: она работает только с последовательными дубликатами. То есть, если одинаковые строки встречаются в разных частях файла, их нужно сначала отсортировать.
Основной синтаксис
uniq [опции] файл
Простой пример
Допустим, у нас есть файл colors.txt:
red
green
green
blue
blue
blue
red
Если мы просто используем uniq:
uniq colors.txt
Результат будет:
red
green
blue
red
Удаление неизбежных дубликатов
Сначала отсортируем файл:
sort colors.txt | uniq
Результат:
blue
green
red
Ключевые опции uniq
Подсчёт повторений
Если вы хотите узнать, сколько раз каждая строка встречалась, используйте опцию -c:
sort colors.txt | uniq -c
Результат:
3 blue
2 green
2 red
Пример
В файле access.log у нас есть список IP-адресов:
192.168.0.1
192.168.0.2
192.168.0.1
192.168.0.3
192.168.0.1
Мы хотим узнать, какой IP встречался чаще всего:
sort access.log | uniq -c | sort -rn
Результат:
3 192.168.0.1
1 192.168.0.2
1 192.168.0.3
3. Команда cut
Команда cut позволяет извлекать определённые части строк, например отдельные столбцы в CSV-файле или диапазоны символов.
Основной синтаксис
cut [опции] файл
Простой пример
Файл data.csv:
Alice,25,Developer
Bob,30,Designer
Charlie,22,Manager
Извлечём только имена (первый столбец):
cut -d',' -f1 data.csv
Результат:
Alice
Bob
Charlie
Где:
-d','— разделитель (запятая).-f1— поле (столбец) для извлечения.
Ключевые опции cut
Выбор диапазона символов
Если наш файл data.csv состоит из фиксированной ширины колонок:
Alice 25 Developer
Bob 30 Designer
Charlie 22 Manager
Мы можем извлечь только возраст (символы с 12 по 14):
cut -c12-14 data.csv
Результат:
25
30
22
Выбор нескольких полей
Если у нас есть файл log.csv:
2023-01-01,INFO,Server started
2023-01-02,ERROR,Connection failed
2023-01-03,INFO,Server stopped
Выберем только дату и уровень логов (поля 1 и 2):
cut -d',' -f1,2 log.csv
Результат:
2023-01-01,INFO
2023-01-02,ERROR
2023-01-03,INFO
4. Практический пример: Объединение sort, uniq и cut
Возьмём лог-файл с такими данными:
user1,192.168.0.1
user2,192.168.0.2
user1,192.168.0.1
user3,192.168.0.3
user2,192.168.0.2
- Извлечём IP-адреса:
cut -d',' -f2 log.txt
- Уберём дубликаты и подсчитаем их:
cut -d',' -f2 log.txt | sort | uniq -c
- Отсортируем по количеству вхождений:
cut -d',' -f2 log.txt | sort | uniq -c | sort -rn
Результат:
2 192.168.0.2
2 192.168.0.1
1 192.168.0.3
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ