Почему 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
Когда нужно убрать дубликаты, многие сразу пишут:
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