junior
Как работают команды sort, uniq, wc, cut и tr?
Эти пять утилит — «строительные кирпичики» текстовых конвейеров в Unix. Каждая делает одну операцию, а вместе через пайпы они решают сложные задачи обработки данных.
sort — сортировка
Пример
sort file.txt # Лексикографическая сортировка
sort -n file.txt # Числовая сортировка
sort -r file.txt # Обратная сортировка
sort -k2 file.txt # Сортировать по второму полю
sort -k2 -n file.txt # Числовая сортировка по второму полю
sort -t',' -k3 -n data.csv # Разделитель — запятая, сортировка по 3-му полю
sort -u file.txt # Сортировка + удаление дубликатов
sort -h sizes.txt # Сортировка human-readable размеров (10K, 2M, 1G)
uniq — работа с дубликатами
Важно:
uniqудаляет только смежные дубликаты, поэтому данные должны быть предварительно отсортированы.
Пример
sort file.txt | uniq # Удалить дубликаты
sort file.txt | uniq -c # Подсчитать количество каждого дубликата
sort file.txt | uniq -d # Показать только дублирующиеся строки
sort file.txt | uniq -u # Показать только уникальные (не повторяющиеся) строки
sort file.txt | uniq -ci # Подсчёт без учёта регистра
wc — подсчёт (word count)
Пример
wc file.txt # Строки, слова, байты
wc -l file.txt # Только количество строк
wc -w file.txt # Только количество слов
wc -c file.txt # Количество байт
wc -m file.txt # Количество символов (учитывает UTF-8)
wc -l *.java # Количество строк в каждом файле + итог
cut — извлечение полей или символов
Пример
cut -d',' -f1,3 data.csv # Поля 1 и 3 (разделитель — запятая)
cut -d':' -f1 /etc/passwd # Первое поле из /etc/passwd
cut -c1-10 file.txt # Первые 10 символов каждой строки
cut -d' ' -f2- file.txt # Со 2-го поля до конца
tr — замена и удаление символов (translate)
Пример
echo "HELLO" | tr 'A-Z' 'a-z' # В нижний регистр
echo "hello" | tr 'a-z' 'A-Z' # В верхний регистр
echo "hello world" | tr -s ' ' # Сжать повторяющиеся пробелы (-s = squeeze)
echo "hello123" | tr -d '0-9' # Удалить цифры (-d = delete)
echo "a:b:c" | tr ':' '\n' # Заменить : на перенос строки
cat file.txt | tr -d '\r' # Удалить возврат каретки (Windows -> Unix)
Комплексный пример — анализ лога
Пример
# Топ-10 IP по количеству запросов
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
# Подсчитать количество строк кода в Java-проекте (без пустых строк)
find src -name "*.java" -exec cat {} + | grep -v '^\s*$' | wc -l
На собеседовании: интервьюер проверяет понимание того, что
uniqтребует предварительной сортировки (иначе дубликаты на разных позициях не удалятся). Частая ошибка — использоватьuniqбезsortи удивляться, что дубликаты остаются.