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
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ