sort | uniq не всегда работает так, как ожидаетсяКогда нужно убрать дубликаты, многие сразу пишут:
sort file.txt | uniq
Работает. Но только если понимать, что именно делает каждая команда.
▪️Как работает
uniqРаспространённое заблуждение -
uniq ищет все повторяющиеся строки.На самом деле он удаляет только соседние дубликаты.
Например:
apple
banana
apple
orange
Если выполнить:
uniq file.txt
получим тот же самый список - одинаковые строки не стоят рядом.
▪️Зачем нужен
sortПосле сортировки одинаковые строки оказываются соседними:
sort file.txt | uniq
Результат:
apple
banana
orange
Именно поэтому эти команды почти всегда используются вместе.
▪️Когда сортировка не подходит
Если порядок строк важен,
sort изменит его.Например, при анализе логов или событий по времени это может полностью исказить картину.
В таких случаях лучше использовать:
awk '!seen[$0]++'
Команда удаляет дубликаты, но сохраняет исходный порядок строк.
▪️Найти только повторяющиеся строки
Иногда нужны не уникальные записи, а наоборот - только дубликаты:
sort file.txt | uniq -d
Или вывести количество повторений:
sort file.txt | uniq -c
Получим:
15 nginx
8 sshd
3 cron
▪️Почему это важно
uniq кажется простой утилитой, но ошибка в понимании её работы часто приводит к неверным результатам. Перед использованием всегда стоит помнить: она сравнивает только соседние строки, а не весь файл целиком.BashTex 📱 #sort